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]



Reply via email to