Struts 2重构代码以避免OGNL静态方法访问

时间:2015-01-19 06:12:22

标签: struts2 static-methods ognl

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)" />

那么,重构以上两种用法的最佳方法是什么?!

1 个答案:

答案 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)" />