2

私はgrailsアプリケーションで作業しています。アプリケーションには、50を超える多くのドメインがあります。生成されるエラーメッセージはデフォルトです。message.propertiesファイルに次のメッセージがあります。

default.blank.message=Field "{0}" cannot be blank.

ドメインクラスの私の例は次のとおりです。

class Person {

    String firstName;
    String lastName;
    String middleName;
    Date dob;
    String gender;
    String religion;
    String nationality;
    String maritalStatus;

    Zone permAddZone;
    District permAddDistrict;
    String permAddVDC;
}

など、たとえば「maritalStatus」などのフィールドを離れると、次のエラーメッセージが表示されます。「フィールド「maritialStatus」を空白にすることはできません。」また、message.propertiesファイルに以下を追加しました

person.maritialStatus=Maritial Status

しかし、それでも「フィールド「maritialStatus」を空白にすることはできません」というメッセージが表示されます。メッセージ。I18n Templates Pluginも使ってみましたが、ドメインクラスがたくさんあるので、それらすべてのエラーメッセージを変更するのは時間がかかります。それで、私にはどのような選択肢がありますか、または私は何を間違っていますか。どんな助けでも大歓迎です。

4

2 に答える 2

3

オーバーライドする適切なメッセージ キーは、各制約タイプのリファレンス ページで指定されています。空欄の場合は

com.example.Person.maritalStatus.blank=Marital status must not be blank

ただし、多くのドメインと多くのプロパティがある場合、これは非常に時間がかかり、繰り返しになります。

あなたが求めているのは、デフォルトメッセージに挿入される前に何らかの方法でドメイン クラス プロパティ名を処理する方法です。これは Grails がすぐにサポートするものではありませんが、私はチャレンジが好きです...そして、驚くほどエレガントな実装方法を見つけました。私のアプローチは、 https://github.com/ianroberts/recursive-messagesで入手可能な grails プラグインであり、フォーマット文字列構文を拡張してフォームのプレースホルダーをサポートすることで機能します

default.blank.message=Field "{0,message,field.name.}" cannot be blank.

プレースホルダー{N,message,prefix}は、指定されたプレフィックスを通常のプレースホルダー置換値の先頭に追加し、結果の文字列 (field.name.maritalStatusこの例では) を引数なしのメッセージ キーとして扱い、通常の方法で検索することによって解決されます。したがって、言語ごとに異なる表現を持つことができます。

デフォルトのSpring Beanの定義を変更するには、プラグインdoWithSpringでは機能するがアプリケーションでは機能しないトリックに依存しているため、プラグインでなければなりません。resources.groovymessageSource

免責事項: これは簡単な修正であり、完全にはテストされていないため、より効率的に実装できる可能性があります。

于 2012-07-14T16:58:17.263 に答える
1

フィールド ラベルをオーバーライドするには、キーをオーバーライドする必要があります。

<package>.<domainclass>.<fieldname>.label

したがって、あなたの場合、試してください:

<package>.Person.martialStatus.label=Label
于 2012-07-16T22:47:46.820 に答える