On 24/03/2004 22:45, "Mike Foody" <[EMAIL PROTECTED]> wrote:

> I apologize if I didn't mention it but I'm using the Velocity tiles
> tool.  Maybe that would be a better place for this question.
> 

  Well the solution for your problem is the one below.
I don't if your using velocity to generate your tiles file (I use velocity
just to build SQL/DAOs with the OJB framework).
If this is true, then you just have to make it generate a tiles file with a
controller class defined by you.

  The runtime argument must be handled by you, programatically, in your own
tiles controller class.



Pedro Salgado

> Mike
> 
> 
> 
> 
> Mike Foody wrote:
> 
>> I have a similar question.  I would like to insert at runtime multiple
>> instances of the same layout and set a property at that time.  I
>> didn't see a way to do this via the documentation and so extended the
>> TilesTool with the following code.  Is there something I've missed?
>> If not is the code below a reasonable way to do this?
>> 
>> Thank you,
>> 
>> Mike
>> 
>> 
>> public class TilesTool extends
>> org.apache.velocity.tools.struts.TilesTool {
>>      public String get(Object obj)
>>    {
>>        if (obj instanceof ComponentDefinition)
>>        {
>>            try
>>            {
>>                return processDefinition((ComponentDefinition)obj);
>>            }
>>            catch (Exception e)
>>            {
>>                Velocity.error("Exception while rendering
>> ComponentDefinition" + e.getMessage());
>>            }
>>        }
>>        return super.get(obj);
>>    }
>>      public ComponentDefinition getDefinition(String name)
>>    {
>>        ComponentDefinition definition = null;
>>        try
>>        {
>>            definition = TilesUtil.getDefinition(name, this.request,
>> this.application);
>>        }
>>        catch (DefinitionsFactoryException dfe)
>>        {
>>                  }
>>        return definition;
>>    }
>>     }
>> 
>> Pedro Salgado wrote:
>> 
>>>  Below is a reply sent to this mailing list about something very
>>> similar to
>>> what you are looking for.
>>> 
>>>  Hope it helps,
>>> 
>>> Pedro Salgado
>>> 
>>> 
>>> Hi Robert..
>>> 
>>> I guess you could achieve the same using the controllerClass
>>> attribute and
>>> building your class.. For instance, I have this definition in the
>>> tiles-defs.xml file:
>>> ---
>>>   <definition name=".layout"
>>>               path="/common/layout.jsp"
>>>    controllerClass='com.dars.XTileAction'>
>>>     <put name="title"       value="Encabezado primario"/>
>>>     <put name="leftside"    value="/common/leftside.jsp"/>
>>>     <put name="rightside"   value="/common/rightside.jsp"/>
>>>     <put name="header"      value="/common/header.jsp"/>
>>>     <put name="footer"      value="/common/footer.jsp"/>
>>>     <put name="body"        value="/common/body.jsp"/>
>>>   </definition>
>>> ---
>>>  And I have this controllerClass
>>> ---
>>> package com.dars;
>>> import org.apache.struts.tiles.actions.TilesAction;
>>> import org.apache.struts.tiles.ComponentContext;
>>> import org.apache.struts.tiles.Controller;
>>> import javax.servlet.http.HttpServletRequest;
>>> import javax.servlet.http.HttpServletResponse;
>>> import javax.servlet.ServletContext;
>>> import javax.servlet.ServletException;
>>> import java.io.IOException;
>>> 
>>> public class XTileAction extends TilesAction implements Controller{
>>>    public void perform(ComponentContext tilesctx,
>>>                        HttpServletRequest request,
>>>                        HttpServletResponse response,
>>>                        ServletContext servctx)
>>>                        throws ServletException, IOException{
>>> /* GetAttributes */
>>>             String titulo= (String)tilesctx.getAttribute("title");
>>>             String derecha= (String)tilesctx.getAttribute("rightside");
>>> /* GetAttributes */
>>>             System.out.println("  Titulo: "+titulo);
>>>             System.out.println(" Derecha: "+derecha);
>>> /* SetAttributes */
>>>           tilesctx.putAttribute("title", "Titulo nuevo de esta
>>> vaina..");
>>>           tilesctx.putAttribute("rightside", "/common/footer.jsp");
>>> /* SetAttributes */
>>>    }
>>> }
>>> ---
>>> You can change the values of those attributes at runtime. I prefer to do
>>> it using this method.
>>> 
>>> Atte.
>>> Domingo A. Rodriguez S.
>>> 
>>> 
>>> --- Robert Taylor <[EMAIL PROTECTED]> escribió: > Greetings, I have a
>>> tiles definition in my tiles-defs.xml similar to
>>>  
>>> 
>>>> below:
>>>> 
>>>> <definition name="search" extends="layout">
>>>>    <put name="heading" value="{0}Search" type="string" />
>>>>    <put name="content" value="/search.jsp" type="page" />
>>>>  </definition>
>>>> 
>>>> which I would like to be able to modify the "heading" value such that
>>>> at runtime I could substitute a value for {0}.
>>>> 
>>>> For example, it would be ideal to use a JSTL type of syntax such as:
>>>> 
>>>> <definition name="search" extends="layout">
>>>>    <put name="heading" value="${param.myValue}Search" type="string" />
>>>>    <put name="content" value="/search.jsp" type="page" />
>>>>  </definition>
>>>> 
>>>> but this does not work.
>>>> 
>>>> 
>>>> 
>>>> robert
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>> 
>>>>   
>>> 
>>> 
>>> _________________________________________________________
>>> Do You Yahoo!?
>>> Información de Estados Unidos y América Latina, en Yahoo! Noticias.
>>> Visítanos en http://noticias.espanol.yahoo.com
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>> 
>>> 
>>> On 24/03/2004 18:14, "Mariano García González"
>>> <[EMAIL PROTECTED]> wrote:
>>> 
>>>  
>>> 
>>>> Hi all,
>>>> 
>>>> I am newbie using tiles, so maybe this question is too easy for you.
>>>> 
>>>> I want to use a tile definition in which, one of the attribute
>>>> values is
>>>> dynamic. It is something like this:
>>>> 
>>>> <definition name="tracebox.def.encoderconfig"
>>>> extends="tracebox.def.menu">
>>>> <put name="title" value="encoderconfig" />
>>>> <put name="body" value="DYNAMIC CONTENT" />
>>>> </definition>
>>>> 
>>>> I want to use a dynamic url in body attribute, depending of a bean
>>>> attribute.
>>>> 
>>>> I hope you understand me. Could you help me?
>>>> 
>>>> Thanks,
>>>> Mariano.
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>   
>>> 
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>  
>>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to