1

リソース ファイルでエラー メッセージを定義しようとしていますが、コントローラーで使用できるようにエラー メッセージを読み込めないようです。

私のservlet-context.xmlファイル:

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

私のフォーム

public class LoginForm {
    @NotEmpty
    private String username;
    // getters and setters
}

私のmessages.propertiesファイル (ソース フォルダーのルートにあるため、classes フォルダーのルートにコンパイルされます):

NotEmpty.loginForm.username=test1
NotEmpty.username=test2
NotEmpty.java.lang.String=test3
NotEmpty=test4

私のコントローラー

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@Valid LoginForm form, BindingResult result) {
    if (result.getFieldErrors().size() > 0) {
        FieldError firstError = result.getFieldErrors().get(0);
        System.out.println(firstError.getDefaultMessage());
    }
    // ...
}

ただし、getDefaultMessage呼び出しの出力は、リソース ファイルで定義したものではありません。常にmay not be emptyです (デフォルト)。

コンテキスト ファイルでさまざまなエントリを試しましたが、リソース ファイルが読み込まれていないようです。私は何を間違っていますか?

4

4 に答える 4

1

このドキュメントによると、必要なのはValidationMessages.properties、プロジェクト クラスパスのルートに呼び出されるプロパティ ファイルを配置することだけです。

その後、次の形式でプロパティを追加できます

org.hibernate.validator.constraints.NotEmpty.message=Default message, can not be empty 
NotEmpty.ClassName.fieldName=fieldName can not be empty.

ClassNameクラスfieldNameの名前で、 はそのクラスのフィールドの名前です。

正しい を設定するには、いくつかの構成を行う必要があるかもしれませんがMessageInterpolator、デフォルトのもので必要なことができると思います。

于 2013-08-20T16:08:12.097 に答える
0

この問題を修正するためにしばらく時間を費やし、次の変更を行いました。現在、Spring 4.0 MVC および Hibernate 4.1.9 で正常に動作しています。

1.メッセージをソースフォルダーの下に置きます。

  1. ReloadableResourceBundleMessageSource が機能していない場合は、次のように変更します

    class="org.springframework.context.support.ResourceBundleMessageSource">

  2. '<'property name="basename" value="messages"/> のようにプロパティを変更します

  3. Message.properties ファイルでは、キーは次の形式である必要があります。

    NotEmpty.userForm.userId

    userForm-->Model class name.
    

(Model クラス名が UserForm の場合は
、userForm と記載する必要があります)

    userId--> attribute of userForm class
于 2014-07-12T08:14:26.857 に答える