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

时间:2011-08-19 00:18:47

标签: java jsp apache-tiles

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

<div>${myBean.id} - ${myBean.name}</div>

我想在tile定义中获取该表达式,并尝试了这个:

<definition template="/WEB-INF/tiles/layout/mytemplate.jsp">
  <put-attribute name="title" expression="${myBean.id} - ${myBean.name}" />
</definition>

在我做的模板中:

<div class="title-header"><tiles:insertAttribute name="title" /></div>

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

<div>${myBean.id} - ${myBean.name}</div>

这里的代码已经简化,以保持这篇文章的简洁,但这正是我想要做的。我也有这样做的原因。

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

由于

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

1 个答案:

答案 0 :(得分: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>

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