在我的数据库中,我已将字段类型从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验证器,验证表明它是错误的,即使值很好
谢谢
答案 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>
希望这是有帮助的