spring 3.0 MVC似乎忽略了messages.properties

时间:2011-06-30 19:49:34

标签: model-view-controller forms spring-3

Spring 3.0 MVC

首先,我没有找到任何关于messages.properties @ springsource的文档。我发现有关覆盖错误消息的所有内容都在各种论坛上。如果有人提到了messages.properties的记录,那就太棒了。也许messages.properties不是来自spring而是java规范?

我已经尝试过遵循这些建议 JSR-303 Type Checking Before Binding我的目标是使用我自己的用户友好错误消息替换某些类型不匹配错误消息

我的情况如下:

模型

public class Test {

    private int numberbomb;

    public int getNumberbomb() {
        return numberbomb;
    }

    public void setNumberbomb(int numberbomb) {
        this.numberbomb = numberbomb;
    }
}

myservlet.xml

<mvc:annotation-driven/>

JSP

<form:form id="test" method="post" modelAttribute="test">

<form:errors path="*"/>

<form:label path="numberbomb">numberbomb</form:label>
<form:input path="numberbomb"/>

</form:form>

类\ messages.properties

typeMismatch=bad value you bad bad person
test.numberbomb=you are driving me crazy with these bad inputs

表单输出

  

无法将类型为java.lang.String的属性值转换为属性numberbomb所需的int类型;嵌套异常是org.springframework.core.convert.ConversionFailedException:无法将类型java.lang.String中的值“three”转换为int类型;嵌套异常是java.lang.NumberFormatException:对于输入字符串:“three”

我的控制器中的BindingResult.toString()

  

字段'numberbomb'上的对象'test'中的字段错误:被拒绝的值[3];代码[typeMismatch.test.numberbomb,typeMismatch.numberbomb,typeMismatch.int,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable:codes [test.numberbomb,numberbomb];参数[];默认消息[numberbomb]];默认消息[无法将类型'java.lang.String'的属性值转换为属性'numberbomb'所需的类型'int';嵌套异常是org.springframework.core.convert.ConversionFailedException:无法将值“3”从类型'java.lang.String'转换为'int'类型;嵌套异常是java.lang.NumberFormatException:对于输入字符串:“three”]

是否以<form:errors>错误的方式显示错误消息显示自定义错误消息?我是否需要在spring配置文件中添加一些内容以告诉它查看messages.properties? Spring似乎忽略了我的messages.properties文件(位于WEB-INF \ classes文件夹中)

感谢您的任何想法!

1 个答案:

答案 0 :(得分:4)

我的一位同事指出了我正确的方向。我更改了myservlet.xml中的messageSource bean

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="messages" />
    <property name="cacheSeconds" value="1" />
</bean>

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="messages"/>
</bean>

无论出于何种原因,这解决了这个问题。谢谢助手! :)