属性 上的 Stripes 框架表达式验证

Stripes Framework expression validation on property

我正在尝试在我的 属性 on actionbean 上添加表达式验证,但我无法使其工作。我什至尝试过使用这样的整数>0,但仍然抛出相同的异常。下面是代码

 @Validate(required=true, minvalue=1, expression="${this > maxBudget}")
int minBudget;

int maxBudget;

我遇到以下异常:

 net.sourceforge.stripes.exception.StripesRuntimeException: Could not parse the EL expression being used to validate
  field minBudget. This is not a transient error. Please double check the following expression for errors: ${this > maxBudget}

引起
 javax.el.ELException: The identifier [this] is not a valid Java identifier as required by section 1.19 of the EL specification (Identifier ::= Java language identifier).
 This check can be disabled by setting the system property org.apache.el.parser.SKIP_IDENTIFIER_CHECK to true.

我尝试了一些变体,但每次都会抛出这个异常。

有人可以指出我在这里做的错误吗

谢谢

如果你想确保 minBudget 大于 maxBudget(不是相反吗?)你可以这样做:

@Validate(required=true, minvalue=1, expression="${minBudget > maxBudget}")   

为了获得更大的灵活性,您可以考虑实施自定义验证方法:

@ValidationMethod(on={"show"})
public void checkBudgetRange(ValidationErrors errors) {

    if (minBudget < maxBudget) 
         errors.addGlobalError( new SimpleError("This is not good..."));

    // all sorts of other checks to your liking 
}   

on 数组参数包含您要为其执行此验证方法的事件处理程序的名称。所以在这里的例子中是 public Resolution show().

https://stripesframework.atlassian.net/wiki/display/STRIPES/Validation+Reference

的 Stripes Framework 网站上有一个很好的解释

更新: 如果你想在验证表达式中使用 this 关键字,你可能需要向你的服务器添加一个 VM 参数(在 Tomcat 8 上测试过):

-Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true

否则可能会报上述错误

从 Tomcat 的版本 7 开始,org.apache.el.parser.SKIP_IDENTIFIER_CHECK 的默认值已从 true 更改为 false

https://tomcat.apache.org/tomcat-6.0-doc/config/systemprops.html

https://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html