我们在struts 2.0.11上部署了以下工作ftl
FTL ::
[#list allPaymentMethods?sort as item]
options = options + "<option name='${item?string}' value='${item?string}' [#if paymentMethods.contains(item)]selected='selected'[/#if]>${item?string}</option>";
[/#list]
相应的操作类具有以下方法,该方法返回非null 列表。
public static List<String> getAllPaymentMethods()
此实现与struts 2.0.11和freemarker 2.3.10一起使用。
在我们升级到struts 2.3.16和freemarker 2.3.19之后解析ftl时开始提供Expression undefined error
。
如果我们将静态方法用于实例方法,则错误消失。
public List<String> getAllPaymentMethods()
我们期待struts / freemarker向后兼容。
似乎struts-2.3.16 / freemarker-2.3.19不支持动作类的静态getter方法。有人观察过类似的问题吗?或者我们不推荐使用静态吸气剂的方式?
迁移时,很难通过所有ftls / Java代码来识别和转换此类静态getter方法到实例方法。
我们可以使用其他替代方法来迁移此类代码/ ftl吗?
答案 0 :(得分:1)
默认情况下,静态方法访问已被禁用,因为自2008-2009左右开始使用Struts 2.1 +。
Nutshell:您必须明确启用静态方法访问。
此更改在发行说明和迁移指南中都有详细说明。