5

春 3.0 MVC

まず第一に、messages.properties @ springsourceに関するドキュメントは見つかりませんでした 。エラー メッセージのオーバーライドについて見つけたものはすべて、さまざまなフォーラムにあります。誰かがmessages.propertiesが文書化されている場所への参照を持っているなら、それは素晴らしいでしょう. たぶん、messages.properties は春ではなく 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>

クラス\メッセージ.プロパティ

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: Unable to convert value "three" to type java.lang.String to type int; です。ネストされた例外は java.lang.NumberFormatException: For input string: "three" です

コントローラー内の BindingResult.toString()

フィールド 'numberbomb' のオブジェクト 'test' のフィールド エラー: 拒否された値 [3]; コード [typeMismatch.test.numberbomb,typeMismatch.numberbomb,typeMismatch.int,typeMismatch]; 引数 [org.springframework.context.support.DefaultMessageSourceResolvable: コード [test.numberbomb,numberbomb]; 引数 []; デフォルトメッセージ [numberbomb]]; デフォルト メッセージ [タイプ 'java.lang.String' のプロパティ値をプロパティ 'numberbomb' の必要なタイプ 'int' に変換できませんでした。ネストされた例外は org.springframework.core.convert.ConversionFailedException: Unable to convert value "three" from type 'java.lang.String' to type 'int'; です。ネストされた例外は java.lang.NumberFormatException: For input string: "three"]

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

アイデアをありがとう!

4

1 に答える 1

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>

なんらかの理由で、これで問題は解決しました。ありがとうアソシエイト!:)

于 2011-06-30T23:39:32.997 に答える