13

現在、デフォルトの制約に対して grails でカスタム エラー メッセージを指定しようとしていますが、これまでのところ、返されるのはデフォルトのエラー メッセージだけです。

grails-app/i18n/messages.properties ファイルを編集する必要があることはわかっています

次のデフォルトのエラー コード メッセージを変更すると、新しいエラー メッセージが正しく表示されます

default.blank.message=Property [{0}] of class [{1}] cannot be blank

しかし、これは私がやろうとしていることではありません。より詳細なエラー報告が必要で、空白にすることができるフィールドが複数あります。できるようにしたいのは、クラスの各フィールドにカスタム メッセージを表示することです。

package com.mycompany.myapp

class Test{

 String name
 def constraints = {
 name(nullable:false, blank:false)
 }
}

(messages.properties の末尾に追加された次のコード)

test.name.blank=Name cannot be blank
test.name.nullable=Name cannot be nullable

grails のドキュメントによると、これはパッケージ名の有無にかかわらず、正しく動作するはずです - className.propertyName.blank

grails.org/doc/latest/ (制約セクション) & (セクション 7.4 - 検証と国際化)

考えられるすべての組み合わせを試しましたが、常にカスタム メッセージが表示されます

grails i18n テンプレートプラグインのインストールも試みました

http://www.grails.org/I18n+Templates+Plugin

エラーコードを自動的に生成しました。既存の messages.properties ファイルの末尾に新しいエラー コードを追加しましたが、それでもデフォルトのエラー メッセージが表示されます。

ただし、プラグインによって生成されたエラー コードには何か違いがありました。

grails doc で指定された形式 - test.name.null=...... の代わりに、test.name.null.error=Custom Message を自動的に生成しました。

デフォルトのエラーメッセージも完全に削除しようとしましたが、まだ表示されています

誰かが以前にこの問題を経験したことがある場合は、誰かが私にできる助けをいただければ幸いです

前もって感謝します

4

5 に答える 5

18

put def messageSource (コントローラーまたはサービス内)

item.errors?.allErrors?.each{ 
println  messageSource.getMessage(it, null)
};

これをよりよく説明する良いリンクも見つけました

http://johnrellis.blogspot.com/2010/02/retrieve-grails-domain-errors-from.html

于 2010-07-16T23:02:28.290 に答える
8

ドキュメントには、デフォルトの検証制約 (空白、nullable、最小、最大、サイズ、範囲など) のいずれかのメッセージをオーバーライドする方法の例が示されています。ただし、各制約のドキュメントを参照するように指示することはできず、下部に使用するプロパティ キーが表示されます。

エラー コード: className.propertyName.size.toosmallまたはclassName.propertyName.size.toobig

制約サイズ http://grails.org/doc/latest/ref/Constraints/size.html

だから、

package com.example
class User {
    String username

    static constraints = {
        username  size:5..15
    }
}

使用する:

com.example.User.username.size.toosmall =よし!小さすぎます: 値 [{2}] を持つクラス [{1}] の [{0}] は、[{3}] から [{4}] までの有効なサイズ範囲内にありません。

com.example.User.username.size.toobig =よし!大きすぎます: 値 [{2}] を持つクラス [{1}] の [{0}] は、[{3}] から [{4}] までの有効なサイズ範囲内にありません

于 2013-12-04T21:41:16.630 に答える
0

これは私のために働いた

com.model.Customer.name.nullable.error = Custom message

それ以外の

com.model.Customer.name.blank = Custom message
于 2016-03-24T18:47:35.957 に答える
0

制約が静的ではない可能性があります。「静的制約 = { ...」と指定する必要があります。

また、nullable はデフォルトで false に設定されるため、指定する必要はありません。

于 2010-07-14T22:42:01.957 に答える
0

messages.properties で完全修飾クラス名を使用しています

com.shareyourlove.User.password.blank=Some custom message
于 2010-07-15T06:08:37.963 に答える