在struts-config.xml
中<form-bean name="myForm" type="com.validator.CustomeDynaValidatorForm">
<form-property name="testId" type="java.lang.Long"/>
</form-bean>
在validation.xml中
<form name="myForm">
<field property="testId" depends="required">
<msg name="required" key="test ID required."/>
</field>
</form>
在validation-rules.xml
中<validator name="required"
classname="com.validator.CustomFieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
org.apache.commons.validator.Validator,
javax.servlet.http.HttpServletRequest"
msg=""/>
在CustomFieldChecks.java
中public static boolean validateRequired(Object bean, ValidatorAction va, Field field, ActionMessages errors,
Validator validator, HttpServletRequest request)
{
String value = null;
if (isString(bean))
{
value = (String) bean;
}
else
{
value = ValidatorUtils.getValueAsString(bean,
field.getProperty());
**// here value is 0 , when the field is left blank in UI**
}
if (GenericValidator.isBlankOrNull(value))
{
//add error message
return false;
}
else
{
return true;
}
}
有人可以告诉我,如何确保如果该字段在UI中保留为空白,则该值应为null而不是0。有办法吗?我正在使用struts 1.2
答案 0 :(得分:3)
AFAIK,使用Struts1,您应该使用String而不是Long来表示用户输入的值,因为这是Struts使用用户实际输入的内容填充表单bean的唯一方法,并允许您重新显示输入页面错误的价值观。
Struts将尝试将空字符串转换为Long,如果字符串不表示有效的long值,则会将Long初始化为0。这是Struts的许多弱点之一。
答案 1 :(得分:2)
是的。找到了解决方案。在代码
下面使用的web.xml中<init-param>
<param-name>convertNull</param-name>
<param-value>true</param-value>
</init-param>
因此,这会将默认值0转换为null。
答案 2 :(得分:0)
这是因为你的字段存在,它只是在不存在时返回null
答案 3 :(得分:0)
GenericValidator.isBlankOrNull(value) behavior is
Checks if the field isn't null and length of the field is greater than zero not including whitespace.
因此,您将所有传入值转换为代码中的String。 '0'也不是空的,所以如果条件没有进入。
您可以像这里一样更改代码
if (GenericValidator.isBlankOrNull(value) ) { ... } else if (value != null && value.equals("0")) { //Add here your sepecial error message for zero }