这个错误在网上找了好久,试过许多方法都不行,我的代码也检查了几遍,也和别人的对照过,愣是没有找到,后来脑壳突发奇想的想到一种可能,那就是自己的创建方式有问题,之后也解决了问题,俺在这里记录下。
俺的springmvc.xml相关配置:
<!--国际化-->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!--设置编码格式,建议写上-->
<property name="defaultEncoding" value="UTF-8" />
<!--如果没有找到k相应的message,不会报异常,输出k值-->
<property name="useCodeAsDefaultMessage" value="true" />
<!--文件名前缀,得到相应文件-->
<property name="basename" value="classpath:i18n"/>
</bean>
<!--把区域信息存在预定义回话中,设置默认区域-->
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<!--设置默认区域,可以不设置-->
<property name="defaultLocale" value="zh_CN" />
</bean>
<!--通过拦截器拦截参数来设置-->
<mvc:interceptors>
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<!--拦截器拦截的参数-->
<property name="paramName" value="local" />
</bean>
</mvc:interceptors>
jsp页面:
<h3><a href="testI18n?local=zh_CN">中文</a></h3>
<h3><a href="testI18n?local=en_US">英文</a></h3>
java代码就是普通的跳转方法
web.xml也是参照原来可以正常运行web.xml,其实是copy过来的。
跳转的页面jsp代码:
要先导入spring的自带标签库
<%@ taglib prefix=“s” uri=“http://www.springframework.org/tags” %>
<form action="valdate" method="post">
<s:message code="name"/><input type="text" name="name" id="name"><br>
<s:message code="sex"/> <input name="sex" id="sex"><br>
<s:message code="pwd"/> <input name="pwd" id="pwd"><br>
<button><s:message code="btn"/></button>
</form><br>
一切的一切都是那么好,但是,一运行就xx报错。
下面是解决方案:
idea非常智能,创建几个名称前缀叫i18n文件,他会这些自动绑定在一起
,就是这个绑定,导致spring mvc无法读取里面的数据。
之后俺删除了一个i18n的文件,右键选择如下图。
点击加号创建刚才删除的文件
之后点击ok后
如果出现了中文解释后再点击ok就行了,之后其他的执行相同步骤,先删除,后添加