0

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

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

无论如何,对于同一个字段,我有另一个字段验证器,它是一个正则表达式。

所以我想如果我不使用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 验证器时,即使值很好,验证也会显示它是错误的

谢谢

4

1 回答 1

0

我找到了……任何物体都是一样的……

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

例如我的动作类是 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>

希望这会有所帮助

于 2012-06-13T16:09:20.933 回答