属性

时间:2015-11-07 13:39:50

标签: stripes

我正在尝试在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.

我尝试了一些变化,但每次抛出此异常。

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

感谢

1 个答案:

答案 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