2012/07/03

[Grails] validationエラー時のメッセージを変更するには

概要

Domainクラスに定義できる制約(validation)でエラーが発生すると以下のようなメッセージが出力されます。
[class jp.co.wave.dsam.Test]クラスのプロパティ[name]の空白は許可されません。
これだとユーザーに全然優しくないので、分かりやすいメッセージに変更する方法を照会します。

検証環境

項目内容
OSMac OS X 10.06
Grails2.0.4

内容

リファレンスの7.5節に変更する方法が記載されていました。 抜粋します。
If a constraint is violated Grails will by convention look for a message code of the form:

[Class Name].[Property Name].[Constraint Code]
In the case of the blank constraint this would be user.login.blank so you would need a message such as the following in your grails-app/i18n/messages.properties file:

user.login.blank=Your login name must be specified!
The class name is looked for both with and without a package, with the packaged version taking precedence. So for example, com.mycompany.myapp.User.login.blank will be used before user.login.blank. This allows for cases where your domain class message codes clash with a plugin's.

For a reference on what codes are for which constraints refer to the reference guide for each constraint.
Googleで翻訳してみますと、
制約が違反している場合は、Grailsは慣例により、フォームのメッセージコードを探します。
[Class Name].[Property Name].[Constraint Code]

このようなあなたのgrails-app/i18n/messages.propertiesファイルに次のようなメッセージが必要になりますので、空白の制約の場合、これはuser.login.blank次のようになります。

user.login.blank=Your login name must be specified!

クラス名が優先してパッケージ化されたバージョンでは、とと、パッケージなしの両方で検索されます。したがって、たとえば、com.mycompany.myapp.User.login.blankはuser.login.blank前に使用されます。これは、ドメインクラスのメッセージコードは、プラグインのと衝突例が可能になります。

制約は、それぞれの制約のためにリファレンスガイドを参照しているコードが何であるかに参考のため。


これを自分なりに読み解きますと、
validationでエラーが発生すると、
grails-app/i18n/messages.propertiesから、
[Class Name].[Property Name].[Constraint Code]
という形式のメッセージコードを探します。

独自に定義することにより、プラグインで表示するメッセージとと異なるメッセージを出力することができます。
試しにやってみると、追加したメッセージが出力されることを確認しました。

参考情報

7 Validation - Reference Documentation

最後に

0 件のコメント:

コメントを投稿