2011-06-30 7 views
5

春3.0 MVC春3.0 MVCはmessages.properties

まず第一に、私はエラーメッセージをオーバーライドすると、さまざまなにされている約見つけたspringsourceすべて@ messages.propertiesに関するいかなる文書を発見していないを無視しているように見えますフォーラム。誰かが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/> 
フォームからmessages.properties \

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> 

クラスは

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

出力

は、プロパティのために必要なint型にjava.lang.String型のプロパティ値を変換に失敗しました。 numberbomb;入れ子にされた例外はorg.springframework.core.convert.convert.convert.ConvertFailedExceptionです:値 "3"をタイプjava.lang.Stringからint型に変換できません。入力文字列の場合: 'numberbomb' フィールド上のオブジェクトの '試験' で "3" 私のコントローラ内の

BindingResult.toStringは()

フィールドエラー:ネストされた例外はjava.lang.NumberFormatExceptionです拒否します値[3]。コード[typeMismatch.test.numberbomb、typeMismatch.numberbomb、typeMismatch.int、typeMismatch];引数[org.springframework.context.support.DefaultMessageSourceResolvable:コード[test.numberbomb、numberbomb];引数[];デフォルトメッセージ[番号爆弾]];デフォルトメッセージ['java.lang.String'型のプロパティ値を、 'numberbomb'プロパティの必須型 'int'に変換できませんでした。入れ子になった例外はorg.springframework.core.convert.ConvertFailedExceptionです:タイプ "java.lang.String"から値 "3"を 'int'に変換することができません。ネストされた例外はjava.lang.NumberFormatExceptionです:入力文字列の場合:「3」]

<form:errors>間違った方法の表示カスタムエラーメッセージとエラーメッセージを表示していますか? messages.propertiesを見るためにspring設定ファイルに何かを追加する必要がありますか?春は私のmessages.propertiesファイル(WEB-INF \ classesフォルダにあります)を無視しているようです。

ありがとうございました!

答えて

4

私の仲間が正しい方向に私を指差しました。私はmyservletのmessageSource beanを変更しました。

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

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

からXML

は、何らかの理由でこの問題を解決しました。ありがとうございました! :)

+1

その理由はドキュメントに記載されています! - http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/support/ReloadableResourceBundleMessageSource.html - "cacheSeconds"設定でプロパティファイルの再ロードをサポートします。アプリケーションサーバーは通常、クラスパスからロードされたすべてのファイルをキャッシュするので、他の場所にリソースを格納する必要があります(たとえば、Webアプリケーションの "WEB-INF"ディレクトリ内に)。クラスパスはアプリケーションに反映されません。 – Ross