我正在尝试在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.
我尝试了一些变化,但每次抛出此异常。
有人可以指出我在这里犯的错误
感谢
答案 0 :(得分:1)
如果你想确保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
上有一个很好的解释 <强>更新强>
如果要在验证表达式中使用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