2012-07-14 207 views
2

我在一个grails应用程序中工作,我在应用程序中有很多域,超过50个!所产生的错误信息是默认的,我已经在我的message.properties以下文件Grails域的自定义错误消息

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模板插件,但由于我有很多的域类,所有修改错误消息将是非常耗时的。所以,我有什么选择或我做错了什么。任何帮助表示赞赏。

回答

1

为了覆盖你需要重写键字段标签:

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

所以你的情况,请尝试:

<package>.Person.martialStatus.label=Label 
+0

谢谢!它工作完美! – 2012-07-19 14:37:25

3

要在每个约束类型的引用页面上指定要覆盖的适当消息键。在blank的情况下,它

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

然而,这将是非常耗时和重复的,如果你有许多领域和许多特性。

您所要求的是以某种方式处理域类属性名称,然后将其插入到默认消息中。这不是Grails支持开箱即用的功能,但我喜欢挑战......并且我发现了一个令人惊讶的优雅方式来实现它。我的做法是对的Grails在https://github.com/ianroberts/recursive-messages插件可用,它的工作原理通过扩展格式字符串语法支持形式

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

一个占位符{N,message,prefix}是通过预先给定的前缀通常的占位符替换值,然后处理解决的占位符结果字符串(本例中为field.name.maritalStatus)作为无参数消息密钥,然后以通常方式查看。因此你可以对不同的语言有不同的表示。

它必须是一个插件,因为它依赖于一个插件的doWithSpring工作,但在应用程序的resources.groovy不起作用,修改默认messageSource的Spring bean定义一招。

免责声明:这是一个快速修复,它尚未经过充分测试,可能可以更有效地实施。

+0

我明白,做这行的所有的所有字段域可能需要很长时间。我只是想在默认错误信息中重命名字段名称。 – 2012-07-15 11:59:27

+0

对,我明白你现在得到了什么。它本身不受支持,但我找到了一种将它作为插件实现的方法 - 请参阅编辑答案。 – 2012-07-16 22:22:57

+0

感谢您的回复,我试了一下,但没有奏效,我可能做错了什么。 – 2012-07-19 14:37:09