2

我创建了一个带有 Double 字段的域。当验证发生时,它会抛出带有大小值的错误消息,并用逗号显示数字。以下是详细内容

Groovy 类

class Quote {

    String content;
    Double size;

    static constraints = {
       content(maxSize:1000, blank:false)
       size(min: 0.00D, max:999.99D)
    }
}

输入值“11111”,得到错误“大小 11,111 超出限制”。我在messages.properties 中添加了属性键/值对。

在这里,我想在没有逗号的情况下返回消息。我的主要目标是根据我的要求获取密钥并格式化返回的消息。我需要这个,因为我有其他需要转换的字段。例如,日期已验证,但在显示错误时需要将公历日期转换为伊斯兰日期并显示给用户。

有谁知道我是否可以做些什么来完成这项工作。

我已经尝试过http://ishanf.tumblr.com/post/434379583/custom-property-editor-for-grails中提供的解决方案,但这不起作用。我也尝试过修改消息值,但是在我的日期问题的情况下这并不灵活。例如,对于键值对,我可以使用 {2, date, mm/dd/yyyy} 而不是使用 {2} 作为占位符,但对于伊斯兰日期,我想以不同的方式格式化和显示内容。

另外,请注意我已经为我的应用程序的默认日期格式创建了一个单独的键。

将不胜感激。

4

1 回答 1

1

在 grails 中,约束的返回是一个已经翻译的字符串。

您可以创建一个 taglib 来格式化,或增强

另一种选择是自定义验证器。自定义验证器在失败时可以返回 false 或 key。

例如,在您的域类中,要验证一个字段:

myDateField validator: {val, obj -> obj.myShinyDateValidatorMethod(val) }

private myShinyDateValidatorMethod() {
  if (isNotValidDate(val) {
    return [the_message_key, val.formatedAsYouWand]
  }
}

并且,在您的属性文件中,您必须定义密钥:

the_message_key=This date: {3} is not valid

这里的技巧是,在验证器的返回中,第一个字符串是键,其余的是该键的参数,但是 grails 已经使用 {0}、{1}、{2} 占位符来表示 className、fieldName 和 value,并且您传递的第一个参数将用作 {3} 占位符。

希望这可以帮助

于 2012-08-27T19:06:27.880 回答