我使用的是带有Tiles 2.1.4的Struts 2.2.3。它工作得非常好,但是现在我正在尝试使用EL表达式,但是我不能让它工作。在Struts2中,我可以使用<s:property value="${getText('Dashboard.label')}"/>,它会从捆绑包中检索消息。我想在Tiles定义上使用相同的方法。到目前为止,我已经向web.xml添加了上下文参数
<context-param>
<param-name>org.apache.tiles.evaluator.AttributeEvaluator</param-name>
<param-value>org.apache.tiles.evaluator.el.ELAttributeEvaluator</param-value>
</context-param>现在我想在定义上使用以下表达式:
<put-attribute name="pane-title"
expression="${getText('Dashboard.label')}"
cascade="true"/>问题是,当我这样做时,无法创建屏幕,原因是:
找不到函数':getText‘
所以我想我漏掉了什么,但我不知道为什么。有什么想法吗?
发布于 2011-11-09 21:52:19
我认为这是行不通的;您正在尝试将OGNL表达式作为普通的旧式JSP EL进行求值。我看到了几个潜在的解决方案。
首先,我会尝试最简单的方法(尽管从长远来看,它可能不适合您的需要):使用进行getText调用的getDashboardLabel函数(或其他函数)公开操作中的值。这应该允许一个简单的属性查询${dashboardLabel}。
这依赖于Tiles解析EL和当前请求解析EL的方式: S2使用一个瘦包装器将值堆栈公开给JSP。
如果这不起作用或不能满足您的需要,我认为下一种方法是看看您是否可以创建一个Tiles属性赋值器来访问值堆栈并替换org.apache.tiles.evaluator.el.ELAttributeEvaluator。我不确定这会有多容易/多难,我必须检查一下。如果您能像现有的Struts标记一样评估OGNL,那将是非常有趣的。
哦,您也可以创建一个JSP函数库;不过,我不太确定如何使用EL求值器;使用JSP,这非常容易。
https://stackoverflow.com/questions/8061953
复制相似问题