我创建了一个包含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},但对于伊斯兰日期,我想格式化并以不同方式显示。
另外,请注意我为我的应用程序创建了一个单独的密钥,用于默认日期格式化。
非常感谢帮助。
答案 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}占位符。
希望这有帮助