使用BigDecimal进行Struts2验证

时间:2012-06-13 10:03:07

标签: validation struts2

在我的数据库中,我已将字段类型从VARCHAR更改为DECIMAL。因此,我将java模型类中的类型从String更改为BigDecimal。

在我之前的XML验证文件中,我有一个requiredString fieldValidator。如果我离开它,每当我在表单字段中输入值(一个大小数)时,requiredString fieldValidator就会触发。 (可能是param拦截器的问题,应该将String转换为BigDecimal)。

无论如何,对于相同的字段,我有另一个字段验证器,它是一个REGEX。

所以我认为,如果我不使用requieredString,只需要正则表达式验证器就可以了,但不行。如果我不填充该字段,则不会触发错误。

所以..总结一下:

我的行动有一个受益人类的字段。 在Beneficiairy类中,我有一个BigDecimal字段。 我的xml验证文件与此字段类似:

<field name="benef.nirBenef">
    <field-validator type="regex">
        <param name="expression"><![CDATA[^(1|2)\d{14}$]]></param>
        <message key="error.securityNumber"/>
    </field-validator>

当该字段为空时,验证表明它没有问题。

为什么?

如果我使用requiredstring验证器,验证表明它是错误的,即使值很好

谢谢     

1 个答案:

答案 0 :(得分:0)

我发现它......任何物体都是一样的......

* /创建一个文件,说明哪些字段是复杂的 文件名:name_of_the_action-conversion.properties

例如我的action类是BenefInfos.java,所以我的属性文件是:BenefInfos-conversion.properties

benef.nirBenef=model.BigDecimalConverter
benef.nirAssure=model.BigDecimalConverter

该值是模型包

中转换器类BigDecimalConverter的名称

* /创建BigDecimalConverter.java

public class BigDecimalConverter extends DefaultTypeConverter {

@Override
public Object convertValue(Map Context, Object values, Class classe) {
    BigDecimal field = null;

    if(classe == BigDecimal.class) {
        String value = ((String[]) values)[0];
        field = new BigDecimal(value);
    }

    return field;
} 

}

* /现在,如果您想要验证,则必须创建自己的验证器。为此:

* /添加validators.xml以声明您自己的验证器:

<validators>
    <validator name="socialsecurityformat" 
        class="validator.SocialSecurityValidator"
    />
</validators>

* /创建验证器类(此处为SocialSecurityValidator)

public class SocialSecurityValidator extends FieldValidatorSupport{
  public void validate(Object o) throws ValidationException {
    String fieldName = this.getFieldName();

    if(this.getFieldValue(fieldName, o) != null) {
        String value = ((BigDecimal)this.getFieldValue(fieldName, o)).toString();
        Pattern p = Pattern.compile("^(1|2|7)\\d{14}$");
        Matcher m = p.matcher(value);

        if(!m.matches()) {
            addFieldError(fieldName, o);
        }
    }
  }

}

* /最后在验证xml文件中使用自己的验证器。

<field name="benef.nirBenef">
    <field-validator type="required">
        <message key="error.requiredField"/>
    </field-validator>
    <field-validator type="socialsecurityformat">
        <message key="error.securityNumber"/>
    </field-validator>
</field>

希望这是有帮助的