1 使用spring mvc国际化时,因为在jsp在第一次载入的时候中没有引入一个你需要实体类(在Page 88~90页有个loginForm.jsp代码),导致运行时抛出异常:
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user' available as request attribute
- <h2><spring:message code="title"/></h2>
- <form:form modelAttribute="user" method="post" action="login">
- <table>
- <tr>
- <td><spring:message code="loginname"/></td>
- <td><form:input path="loginname"/></td>
- </tr>
- <tr>
- <td><spring:message code="password"/></td>
- <td><form:input path="password"/></td>
- </tr>
- <tr>
- <td><input type="submit" value="<spring:message code="submit"/>"></td>
- </tr>
- </table>
- </form:form>
解决方法
- 在jsp 头部添加<jsp:useBean id="user" class="com.demo.domain.User" scope="request"/>
2
配置Spring @Valid国际化无法映射 在Page 114~119页
message.properties文件中
username.error=\u7528\u6237\u540D\u957F\u5EA6\u5FC5\u987B\u57285-20\u4E4B\u95F4
mvc-context.xml 文件中
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<!-- 如果不加默认到 使用classpath下的 ValidationMessages.properties -->
<property name="validationMessageSource" ref="messageSource" />
</bean>
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:message</value>
</list>
</property>
<!-- 资源文件编码格式 -->
<property name="fileEncodings" value="utf-8" />
<!-- 对资源文件内容缓存时间,单位秒 -->
<property name="cacheSeconds" value="120" />
</bean>
问题描述 :虽然你定义了校验Bean,但还是要告知Spring的,也就是 <mvc:annotation-driven validator="xxxxx"> 这个配置,有了这个配置,springMvc才会用你自己定义的处理类
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<!-- 如果不加默认到 使用classpath下的 ValidationMessages.properties -->
<property name="validationMessageSource" ref="messageSource" />
</bean>
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:message</value>
</list>
</property>
<!-- 资源文件编码格式 -->
<property name="fileEncodings" value="utf-8" />
<!-- 对资源文件内容缓存时间,单位秒 -->
<property name="cacheSeconds" value="120" />
</bean>
<mvc:annotation-driven/>是告知Spring,我们启用注解驱动。然后Spring会自动为我们注册
HandlerMapping和HandlerAdapter的实现类到工厂中,来处理我们的请求。
解决方法
<!-- SpringMVC配置 -->
<mvc:annotation-driven conversion-service="conversionService" validator="validator"/>