我使用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相当新,所以我可能没有使用正确的术语。
答案 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感知属性评估器。