Struts 2 在验证器实验中使用 StringUtils
Struts 2 using StringUtils in validator expersions
我们正在使用 Struts 2 个验证器 @FieldExpressionValidator
和 @ExpressionValidator
。这些验证器检查 OGNL 表达式。在很多情况下,我们会在这些表达式中处理字符串。
expression="(captcha=='' && captcha== null || ....)
我们发现如果可以在这里使用 StringUtils ( isEmpty ,trimToEmpty,... ) 会非常有用。
由于我们将 struts.ognl.allowStaticMethodAccess
设置为 false,出于安全问题,我们尝试通过将此 getter 添加到 action
来解决它
public StringUtils getStringUtils(){
return new StringUtils();
}
然后是表达式中的 stringUtils.isEmpty(captcha)
。但是没用。
为了调试我们测试了
ActionContext.getContext().getValueStack().findValue("stringUtils"); //returns org.apache.commons.lang3.StringUtils@693ade51 which shows there is an object in the stack
ActionContext.getContext().getValueStack().findValue("stringUtils.isEmpty('dd')"); //returns null
有意见吗?!
isEmpty
是静态方法,应使用 class 前缀静态访问。一旦您使用 OGNL,您就必须允许静态方法访问或为该方法编写一个包装器,即
public boolean stringUtilsIsEmpty(String captcha) {
return StringUtils.isEmpty(captcha);
}
然后
ActionContext.getContext().getValueStack().findValue("stringUtilsIsEmpty('dd')");
但是,在 JSP 中,您可以
<s:if test="captcha != null && captcha != ''">
do something
</s:if>
这和StringUtils#isEmpty()
一样。
我们正在使用 Struts 2 个验证器 @FieldExpressionValidator
和 @ExpressionValidator
。这些验证器检查 OGNL 表达式。在很多情况下,我们会在这些表达式中处理字符串。
expression="(captcha=='' && captcha== null || ....)
我们发现如果可以在这里使用 StringUtils ( isEmpty ,trimToEmpty,... ) 会非常有用。
由于我们将 struts.ognl.allowStaticMethodAccess
设置为 false,出于安全问题,我们尝试通过将此 getter 添加到 action
public StringUtils getStringUtils(){
return new StringUtils();
}
然后是表达式中的 stringUtils.isEmpty(captcha)
。但是没用。
为了调试我们测试了
ActionContext.getContext().getValueStack().findValue("stringUtils"); //returns org.apache.commons.lang3.StringUtils@693ade51 which shows there is an object in the stack
ActionContext.getContext().getValueStack().findValue("stringUtils.isEmpty('dd')"); //returns null
有意见吗?!
isEmpty
是静态方法,应使用 class 前缀静态访问。一旦您使用 OGNL,您就必须允许静态方法访问或为该方法编写一个包装器,即
public boolean stringUtilsIsEmpty(String captcha) {
return StringUtils.isEmpty(captcha);
}
然后
ActionContext.getContext().getValueStack().findValue("stringUtilsIsEmpty('dd')");
但是,在 JSP 中,您可以
<s:if test="captcha != null && captcha != ''">
do something
</s:if>
这和StringUtils#isEmpty()
一样。