You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tiles.apache.org by Pascual Pereda <pa...@ymail.com> on 2011/11/23 23:45:17 UTC

Variables in Tiles EL


Hi,

I'm using tiles 2.2 with Spring MVC. I use Expression Language in my tiles-defs.xml file, so it's full of definitions like this:

<definition name="test" extends="base">
  <put-attribute name="body" expression="/view/${variable.property ? 'foo' : 'bar'}/test.jspx"/>
</definition>

As the same big expression is replicated across all my definitions, I was wondering if there was some way to define it only once, and use a simpler expression like ${folder} instead of the complicated one.

Thanks in advance


Re: Variables in Tiles EL

Posted by Nicolas LE BAS <ma...@nlebas.net>.
On 11-11-23 05:45 PM, Pascual Pereda wrote:
>
>
> Hi,
>
> I'm using tiles 2.2 with Spring MVC. I use Expression Language in my tiles-defs.xml file, so it's full of definitions like this:
>
> <definition name="test" extends="base">
>    <put-attribute name="body" expression="/view/${variable.property ? 'foo' : 'bar'}/test.jspx"/>
> </definition>
>
> As the same big expression is replicated across all my definitions, I was wondering if there was some way to define it only once, and use a simpler expression like ${folder} instead of the complicated one.
>
> Thanks in advance
>

Hi,

I don't know any expession language that will allow you to declare 
variables, and I don't think you can use tiles attributes directly (I 
think Antonio will correct me if I'm wrong)

But since this is decision logic, I think tiles-defs.xml is not the 
right place for it. What if you need to decide something more 
complicated than "foo" or "bar" in the future?

I would make the decision in the controller, or if you really don't want 
to, in a ViewPreparer like this (see also 
http://tiles.apache.org/2.2/framework/tutorial/advanced/preparer.html):

public class ThemePreparer implements ViewPreparer {

     public void execute(TilesRequestContext tilesContext, 
AttributeContext attributeContext) {
	MyVariable variable = (MyVariable) tilesContext
             .getRequestScope().get("variable");
         String theme = variable.getProperty() ? "foo" : "bar";
         tilesContext.getRequestScope().put("theme", theme);
     }
}

<definition name="base" preparer="org.example.ThemePreparer" ... >
    ...
</definition>

<definition name="test" extends="base">
    <put-attribute name="body" expression="/view/${theme}/test.jspx"/>
</definition>

Hope this helps.
Nick