不处理Apache tile定义中的EL表达式

Ben*_*tin 5 java jsp apache-tiles

我使用Apache tile进行模板化,部分模板是标题文本.此文本取决于页面所属的部分.每个页面都包含一个bean,标题文本是使用该bean的属性构建的.bean的每个页面都有不同的名称.所以,在我的JSP文件中,我会有这样的事情:

<div>${myBean.id} - ${myBean.name}</div>
Run Code Online (Sandbox Code Playgroud)

我想在tile定义中得到那个表达式,我尝试了这个:

<definition template="/WEB-INF/tiles/layout/mytemplate.jsp">
  <put-attribute name="title" expression="${myBean.id} - ${myBean.name}" />
</definition>
Run Code Online (Sandbox Code Playgroud)

在我做的模板中:

<div class="title-header"><tiles:insertAttribute name="title" /></div>
Run Code Online (Sandbox Code Playgroud)

但结果是未经处理的EL表达式:

<div>${myBean.id} - ${myBean.name}</div>
Run Code Online (Sandbox Code Playgroud)

这里的代码已经简化,以保持这篇文章的简洁,但这正是我想要做的.也有理由我尝试这样做.

知道EL表达式没有被处理的原因吗?

谢谢

注意:我对JSP和Apache Tiles相当新,所以我可能没有使用正确的术语.

Wil*_*ler 6

我只是想指出巴里的答案(在他对原始帖子的评论中)帮助了我.您需要拥有tiles-el.jar类路径(如果您想使用标准EL;可能需要相应的MVEL或OGNL JAR).

Tiles 2.关于AttributeEvaluator,如果您使用Spring,可以使用以下方法进行设置:

<bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/tiles/**/views.xml</value>
        </list>
    </property>

    <!-- Initialize expression language support for use in Tiles definitions. -->
    <property name="tilesProperties">
        <props>
            <prop key="org.apache.tiles.evaluator.AttributeEvaluator">org.apache.tiles.evaluator.el.ELAttributeEvaluator</prop>
        </props>
    </property>        
</bean>
Run Code Online (Sandbox Code Playgroud)

Tiles 3. Spring TilesConfigurerfor Tiles 3自动检查JSP API 2.1和Tiles EL JAR的类路径.如果它们都找到它们,它会自动创建一个EL感知属性评估器.