在自定义验证器中重用Struts2核心验证

时间:2013-09-17 05:10:50

标签: validation struts2 customvalidator

我们正在开发一个新的struts2自定义验证器。

如果用户帐号具有有效格式,则此验证程序将检查。 对于此验证程序,帐号不得为null和整数。

有两种方法:

  1. 我们开发验证器并假设用户使用 使用前@IntRangeFieldValidator@RequiredFieldValidator 我们的验证器

    @IntRangeFieldValidator(type = ValidatorType.FIELD, min = "1", key = "validate.int.min")
    @RequiredFieldValidator(type = ValidatorType.SIMPLE, key = "validate.required")    
    @CustomValidator(type = "accountNumber", message = "Price must be a number")
    public void setAccount(Integer accountNumber){}
    

    通过这种方式,验证将如下所示

    public class AccountNamuberValidator extends FieldValidatorSupport {
    
        String fieldName = getFieldName();
        String val = (String) getFieldValue(fieldName, object);
    
        if (val == null && (value instanceof String ) &&... ) {
            //we are assumption is not correct we just return
            return;
        }
    }
    

    正如您所看到的,我们不会处理我们假设通过整数验证或必需验证完成的任何验证。如果出现任何问题我们返回并且不添加任何归档错误。

  2. 接下来的方法是我们开发一个复杂的帐号 验证调用整数验证和必需的验证 在开始自己的验证检查之前。在这里,我们可以,一些如何, 相互验证链。

    public class AccountNamuberValidator extends FieldValidatorSupport {
    
        String fieldName = getFieldName();
        String val = (String) getFieldValue(fieldName, object);
        //Call struts required validaitor
        //Call struts integer validaitor
        //Go on with account number validation
    }
    

    因此使用此验证器将为:

    @CustomValidator(type = "accountNumber", message = "Price must be a number")
    public void setAccount(Integer accountNumber){}
    

  3. 现在有以下问题:

    • 是否可以做第二个approch(我找不到如何从我的自定义验证器调用Struts2验证器)?
    • 哪种方法更好? (我发现Strut使用第一种方法)

0 个答案:

没有答案