You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Robert Taylor <rt...@mulework.com> on 2003/12/29 18:46:56 UTC

[Tiles] Populating Tiles definition attribute at runtime

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: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org


Re: [Tiles] Populating Tiles definition attribute at runtime

Posted by Brice Ruth <br...@fiskars.com>.
The cleanest thing to do here, likely, would be to have your 'content' 
attribute have a value that maps to an Action (/search.do would work, I 
think - Vic might be able to confirm this) and in the Action class, 
define an attribute "heading" stored in request context, that pulls from 
request parameters. The tiles-defs.xml isn't really a "dynamic" 
mechanism in any way - its a config file that is loaded - it isn't 
treated as a JSP that gets compiled into a .java and then compiled to a 
.class servlet.

Alternately, just set your heading attribute in tiles-defs.xml to be 
"Search" or whatever you want, and in the /search.jsp file, use JSTL to 
prepend param.myValue. This would be pretty clean for simple scenarios.

Robert Taylor wrote:

>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: struts-user-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: struts-user-help@jakarta.apache.org
>
>  
>

-- 
Brice D. Ruth
Sr. IT Analyst
Fiskars Brands, Inc.


---------------------------------------------------------------------
To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org


Re: [Tiles] Populating Tiles definition attribute at runtime

Posted by Brice Ruth <br...@fiskars.com>.
Wow, that's pretty cool ... I'll have to check out the controllerClass 
stuff sometime :)

Domingo A. Rodriguez S. wrote:

>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 <rt...@mulework.com> 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: struts-user-unsubscribe@jakarta.apache.org
>>For additional commands, e-mail: struts-user-help@jakarta.apache.org
>> 
>>    
>>
>
>_________________________________________________________
>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: struts-user-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: struts-user-help@jakarta.apache.org
>
>  
>

-- 
Brice D. Ruth
Sr. IT Analyst
Fiskars Brands, Inc.


---------------------------------------------------------------------
To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org


Re: [Tiles] Populating Tiles definition attribute at runtime

Posted by "Domingo A. Rodriguez S." <do...@yahoo.com>.
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 <rt...@mulework.com> 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: struts-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: struts-user-help@jakarta.apache.org
>  

_________________________________________________________
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: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org


RE: [Tiles] Populating Tiles definition attribute at runtime

Posted by Robert Taylor <rt...@mulework.com>.
Thanks to all who replied. I'll look into each suggested solution more
closely.

robert

> -----Original Message-----
> From: Robert Taylor [mailto:rtaylor@mulework.com]
> Sent: Monday, December 29, 2003 2:15 PM
> To: Struts Users Mailing List
> Subject: RE: [Tiles] Populating Tiles definition attribute at runtime
>
>
> Thanks for the reply Pedro, but I was looking for a cleaner solution.
>
> robert
>
> > -----Original Message-----
> > From: Pedro Salgado [mailto:salgado.pc@04web.com]
> > Sent: Monday, December 29, 2003 12:51 PM
> > To: Struts Users Mailing List
> > Subject: Re: [Tiles] Populating Tiles definition attribute at runtime
> >
> >
> >
> >   I don¹t know if it is possible to change a tiles definition at
> > runtime but
> > a solution to your problem could be solved by specifying a
> definition that
> > uses a jsp file that does a conditional include according to a given
> > parameter?
> >
> > <definition name="choose.def" extends="base.def">
> >   <put name="header" value="/header.jsp"/>
> >    <put name="body" value="/choose.jsp"/>  <-----
> >    <put name="footer" value="/footer.jsp"/>
> > </definition>
> >
> > ----> choose.jsp
> >
> > <c:import url='/WEB-INF/com/website/tiles/choose/${request.choose}'/>
> >
> >
> > Pedro Salgado
> >
> >
> > On 29/12/2003 17:46, "Robert Taylor" <rt...@mulework.com> wrote:
> >
> > > 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: struts-user-unsubscribe@jakarta.apache.org
> > > For additional commands, e-mail: struts-user-help@jakarta.apache.org
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: struts-user-help@jakarta.apache.org
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: struts-user-help@jakarta.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org


RE: [Tiles] Populating Tiles definition attribute at runtime

Posted by Robert Taylor <rt...@mulework.com>.
Thanks for the reply Pedro, but I was looking for a cleaner solution.

robert

> -----Original Message-----
> From: Pedro Salgado [mailto:salgado.pc@04web.com]
> Sent: Monday, December 29, 2003 12:51 PM
> To: Struts Users Mailing List
> Subject: Re: [Tiles] Populating Tiles definition attribute at runtime
>
>
>
>   I don¹t know if it is possible to change a tiles definition at
> runtime but
> a solution to your problem could be solved by specifying a definition that
> uses a jsp file that does a conditional include according to a given
> parameter?
>
> <definition name="choose.def" extends="base.def">
>   <put name="header" value="/header.jsp"/>
>    <put name="body" value="/choose.jsp"/>  <-----
>    <put name="footer" value="/footer.jsp"/>
> </definition>
>
> ----> choose.jsp
>
> <c:import url='/WEB-INF/com/website/tiles/choose/${request.choose}'/>
>
>
> Pedro Salgado
>
>
> On 29/12/2003 17:46, "Robert Taylor" <rt...@mulework.com> wrote:
>
> > 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: struts-user-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: struts-user-help@jakarta.apache.org
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: struts-user-help@jakarta.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org


Re: [Tiles] Populating Tiles definition attribute at runtime

Posted by Pedro Salgado <sa...@04web.com>.
  I don¹t know if it is possible to change a tiles definition at runtime but
a solution to your problem could be solved by specifying a definition that
uses a jsp file that does a conditional include according to a given
parameter?

<definition name="choose.def" extends="base.def">
  <put name="header" value="/header.jsp"/>
   <put name="body" value="/choose.jsp"/>  <-----
   <put name="footer" value="/footer.jsp"/>
</definition>

----> choose.jsp

<c:import url='/WEB-INF/com/website/tiles/choose/${request.choose}'/>


Pedro Salgado


On 29/12/2003 17:46, "Robert Taylor" <rt...@mulework.com> wrote:

> 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: struts-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: struts-user-help@jakarta.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org