今天调了一整天,主要就是jsp禁用前端验证后,提交表单,页面报400错误:解决方案,@vaild注解后要紧跟BindingResult,不然就会包400错误。它俩是成对出现的,也就是有多少个实体需要验证就要有多少对。
再就是页面不报400错误了,但是后端验证始终不好使,也就是bindingResult对象getErrors 始终是false,这个真的好郁闷。
后来研究了一下springMvc的配置发现要这样配置:
这是后添加的:
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="org.bdp.common.convertor.DataConvertor">
</bean>
</list>
</property>
</bean>
<bean id="webBindingInitializer" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="conversionService" ref="conversionService"/>
<property name="validator" ref="validator"/>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitializer" ref="webBindingInitializer"/>
</bean>
这是原来的:
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<property name="validationMessageSource" ref="messageSource" />
</bean>
<mvc:annotation-driven validator="validator" />
最搞笑的是当我把后加上的去掉,也就是恢复配置文件,验证就好使了。我也不知道是为什么。
验证好使了,但是又有新问题,就是有些字段的验证是非空的,但是还是不好用。后来如此解决:
后来发现在实体上面的注解,如果是String类型的要用NotEmpty,如果是integer和double用NotNull。