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”,会显示以下错误消息,“字段“maritalStatus”不能为空。”。我还将以下内容添加到我的 message.properties 文件中

person.maritialStatus=Maritial Status

但我仍然得到“字段“maritialStatus”不能为空白。信息。我也尝试过使用 I18n 模板插件,但由于我有很多域类,修改所有这些类的错误消息会很耗时。那么,我有什么选择或者我做错了什么。任何帮助表示赞赏。

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此示例中)视为无参数消息键,并以通常的方式查找,来解析占位符。因此,您可以对不同的语言有不同的表示。

它必须是一个插件,因为它依赖于一个在插件中有效doWithSpring但在应用程序中无效的技巧resources.groovy来修改默认messageSourceSpring bean 的定义。

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

于 2012-07-14T16:58:17.263 回答
1

为了覆盖字段标签,您需要覆盖键:

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

因此,在您的情况下,请尝试:

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