Struts 2,2.3.20提到了
将禁用从表达式访问静态方法的支持 很快,请考虑重新考虑您的申请,以避免进一步 问题!
我们在验证器中使用了OGNL静态调用:
@ExpressionValidator(
expression = "@foo.bar@isValidAmount(amount)",
key = "validate.amount.is.not.valid"),
我们也在标签中使用它
<s:set var="test"
value="@foo.bar@sampleMethod(#attr.sampleObject.property1)" />
那么,重构以上两种用法的最佳方法是什么?!
答案 0 :(得分:3)
在您的代码中,您正在使用静态方法调用。最好的方法是在action类中创建一个包装静态方法并在OGNL中使用它的方法。
public class Wrapper {
public boolean isValidAmount(amount){
return foo.barr.isValidAmount(amount);
}
public Object sampleMethod(Object property1){
return foo.barr.sampleMethod(Object property1);
}
}
只要action bean在值堆栈中,您就可以使用
@ExpressionValidator(
expression = "isValidAmount(amount)",
key = "validate.amount.is.not.valid"),
或在JSP
中<s:set var="test"
value="sampleMethod(#attr.sampleObject.property1)" />