Struts 2 重构代码以避免OGNL静态方法访问
Struts 2 refactoring code to avoid OGNL static method access
Struts2、2.3.20提到
Support for accessing static methods from expression will be disabled
soon, please consider re-factoring your application to avoid further
problems!
我们在验证器中使用了 OGNL 静态调用:
@ExpressionValidator(
expression = "@foo.bar@isValidAmount(amount)",
key = "validate.amount.is.not.valid"),
我们也在标签中使用它
<s:set var="test"
value="@foo.bar@sampleMethod(#attr.sampleObject.property1)" />
那么,重构以上两种用法的最佳方法是什么?!
在您的代码中,您使用的是静态方法调用。最好的方法是在动作 class 中创建一个包装静态方法的方法并在 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)" />
Struts2、2.3.20提到
Support for accessing static methods from expression will be disabled soon, please consider re-factoring your application to avoid further problems!
我们在验证器中使用了 OGNL 静态调用:
@ExpressionValidator(
expression = "@foo.bar@isValidAmount(amount)",
key = "validate.amount.is.not.valid"),
我们也在标签中使用它
<s:set var="test"
value="@foo.bar@sampleMethod(#attr.sampleObject.property1)" />
那么,重构以上两种用法的最佳方法是什么?!
在您的代码中,您使用的是静态方法调用。最好的方法是在动作 class 中创建一个包装静态方法的方法并在 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)" />