覆盖Grails错误消息以格式化日期和数字

时间:2012-08-22 11:57:27

标签: grails formatting

我创建了一个包含Double字段的域。验证发生时,它会抛出错误消息,其大小值显示带逗号的数字。以下是detials

Groovy Class

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}作为占位符我可以使用{2,date,mm / dd / yyyy},但对于伊斯兰日期,我想格式化并以不同方式显示。

另外,请注意我为我的应用程序创建了一个单独的密钥,用于默认日期格式化。

非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

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

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

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

例如,在您的域类中,要伪装字段:

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}占位符。

希望这有帮助