站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Spring 专题对非String类型进行校验时的出错处理

对非String类型进行校验时的出错处理

摘要: 对非String类型进行校验时的出错处理 关于Spring MVC对非String类型进行校验时的出错处理 我在对User.age (Integer型),进行校验时,如果输入的是字符总是出错: Fai...
对非String类型进行校验时的出错处理
关于Spring MVC对非String类型进行校验时的出错处理
   我在对User.age (Integer型),进行校验时,如果输入的是字符总是出错:
Failed to convert property value of type [java.lang.String] to required type [java.lang.Integer] for property age; nested exception is java.lang.NumberFormatException: For input string: "ff"
解决方法:
1.本例用的是commons-validator的开源框架
2.在Controller中加
protected void initBinder(HttpServletRequest request,
       ServletRequestDataBinder binder) {     
              binder.registerCustomEditor(Integer.class, null,new CustomNumberEditor(Integer.class, null, true));
              binder.registerCustomEditor(Long.class, null,new CustomNumberEditor(Long.class, null, true));
              binder.registerCustomEditor(byte[].class,new ByteArrayMultipartFileEditor());
              SimpleDateFormat dateFormat = new SimpleDateFormat(getText("date.format", request.getLocale()));
              dateFormat.setLenient(false);
              binder.registerCustomEditor(Date.class, null,new CustomDateEditor(dateFormat, true));
       }

3.在资源文件ApplicationResources_zh_CN.properties 中加:
 
user.age=\u5e74\u9f84
typeMismatch.java.lang.Integer={0}\u5fc5\u987b\u4e3a\u4e00\u6570\u503c\u3002
4.一些朋友说在用非对象类型如int时也总是出错,但我在测试时发现不管是用int 还是用float,如果不输或输入字符,系统均会自动赋值 int为0,float为0.0
 
5.以下是一个不错的入门文章,转发于jamyy2000的专栏”:
 
 关于Spring中Commons Validator的使用说明
springvalidate验证需要两个beanValidatorFactoryBeanValidator)及两xml文件(validator-rules.xmlvalidation.xml)的支持,ValidatorFactory用于制造BeanValidator,后者则是在程序中执行校验的控制beanValidatorrules.xml中定义了各种验证的规则,如字段不为空,字段输入值必须为整数等等。Validation.xml中则定义了那些beanbean中的哪些属性字段需要验证,使用哪些验证规则。validate 分为两级验证,客户端验证(javascript)和服务器端验证。以下是使用validate的步骤:
1.       在配置文件中声明ValidatorFactory BeanValidator
 
<bean id="validatorFactory" class="org.springmodules.commons.validator.DefaultValidatorFactory"> -----
             <property name="validationConfigLocations"> -----
               <list>
                      <value>/WEB-INF/validator-rules.xml</value>
                      <value>/WEB-INF/validation.xml</value>
                 </list>
             </property>
        </bean>
        <bean id="beanValidator"
class="org.springmodules.commons.validator.DefaultBeanValidator"> -------
             <property name="validatorFactory">
                     <ref bean="validatorFactory" /> --------
             </property>
 </bean>
 
     声明validatoFactory这里我们使用spring DefaultValidatorFactory
     定义其validationConfigLocations属性,将validator-rules.xmlvalidation.xml传入
     声明beanValidator这里我们使用springDefaultBeanValidator
     在其属性中指明要使用的validatorFactory。这里我们使用刚刚定义的validatorFactory
 
2.       在需要进行验证的controller(即要使用form表单或者commandcontroller)中声明validate
 
<beanid="xxxxController" ……>
<property name="commandName" value="userCommand"/> -----
<property name="commandClass" value="com.resoft.User"/>   -----
<property name="validator" ref="beanValidator"/>   -------
     ……
</bean>
 
     commandName用于指明需要验证的 command的名字,这个名字必须和 validation.xml<formname=" xxxxx "> 所写的名字保持一致。
     commandClass用于指定这个command的类型。其必须与你jsp提交的form最后形成的command类型相一致。
     声明该controller使用validator,这里将我们刚刚定义的beanValidator传入进去。
 




↑返回目录
前一篇: 彻底理解spring的定制任务(scheduling)
后一篇: 关于spring框架中的ioc的幽默解释