2016-07-28 71 views
1

我有两个字段在我的表单中,我想要有条件地验证(如果另一个字段有特定的值,我希望验证,否则我不希望它验证)。Struts2中的条件验证

最初我计划使用字段表达式来做到这一点(因为类似的问题建议),但我需要的不仅仅是更多的东西(我认为)EL报价:

这里是我当前xml:

<field name="effectiveDate"> 
    <field-validator type="fieldexpression"> 
     <param name="expression">childReason not in {1} or effectiveDate.length() gt 9</param> 
     <message key="validation.effectiveDate.entered" /> 
    </field-validator> 
</field> 

这个工作...然而,而不是做一个简单的字段长度检查,我想使用正则表达式来确保日期是有效的。此外,我想确保他们未来不会输入日期或比今天的日期早一年的日期。

基本上我想使用自定义验证器或让我的表达式调用一个方法来检查这些东西。

+0

验证使用'validateXXX'方法的操作或创建自定义验证器。 –

+0

@AleksandrM想让答案如此我可以接受?谢谢。 – Othya

回答

1

如果你的行动实现Validateable接口(其中它,如果你正在扩大ActionSupport),并使用堆栈validation拦截器,那么你可以使用validateXXX()方法,其中XXX为你想验证方法的名称。

public void validateSave() { 
    // some is some complex conditional validation :) 
    if (some) { 
     addFieldError("effectiveDate", "Wrong date!") 
    } 
} 

另一种选择是创建自定义验证器。

+0

虽然Struts可能提供这种类型的验证,但它有时会根据具体的使用情况导致验证规则的重复。 – Naros

+0

@Naros和?这并不意味着你不能使用它。 –