如何为grails中具有约束的属性显示用户友好的错误消息

如何为grails中具有约束的属性显示用户友好的错误消息,grails,Grails,我在域类中有一个属性,它有一些约束 ([([A-Z0-9]{2,4}-)+[0-9]{1,2}]) 模式。当用户输入错误的模式时,它会显示 值为[A1]的类[XXXXX]的属性[XXXXX]与所需模式[([A-Z0-9]{2,4}-+[0-9]{1,2}]不匹配 相反,我需要显示用户友好的消息,如何在grails中做到这一点,因为我是grails新手 谢谢默认消息位于i18n文件messages.properties中 您将拥有所有默认消息。查看grails文档的示例,了解如何指定消息 我认

我在域类中有一个属性,它有一些约束

([([A-Z0-9]{2,4}-)+[0-9]{1,2}]) 
模式。当用户输入错误的模式时,它会显示

值为[A1]的类[XXXXX]的属性[XXXXX]与所需模式[([A-Z0-9]{2,4}-+[0-9]{1,2}]不匹配

相反,我需要显示用户友好的消息,如何在grails中做到这一点,因为我是grails新手


谢谢

默认消息位于i18n文件messages.properties中

您将拥有所有默认消息。查看grails文档的示例,了解如何指定消息


我认为它类似于
className.fieldName.constraintName=message
您必须将
消息放入i18n目录下的属性文件
默认消息位于i18n文件messages.properties中

您将拥有所有默认消息。查看grails文档的示例,了解如何指定消息


我认为这类似于
className.fieldName.constraintName=message
你必须把
messages.properties
文件放在i18n目录下

如果你打开
i18n/messages.properties
文件,你会看到一个类似的属性

className.fieldName.matches.invalid=your error message
值为[{3}]的类[{1}]的default.doesnt.match.message=Property[{0}]与所需的模式[{4}]不匹配

此属性定义违反正则表达式约束时显示的默认错误消息。如果您只想更改在违反此特定属性的regex约束时使用的错误消息,可以通过添加带有更具体代码的消息来实现

更新 根据您的后续问题:


是否有可能在域类端或控制器端执行此操作


似乎您可能希望以编程方式设置错误消息。您可以通过验证域类后添加到域类的
errors
属性来执行此操作。这是接口的一个实现,它提供了各种
rejectValue
方法,允许您以编程方式注册字段错误及其相关消息

如果打开
i18n/messages.properties
文件,您将看到一个类似

className.fieldName.matches.invalid=your error message
值为[{3}]的类[{1}]的default.doesnt.match.message=Property[{0}]与所需的模式[{4}]不匹配

此属性定义违反正则表达式约束时显示的默认错误消息。如果您只想更改在违反此特定属性的regex约束时使用的错误消息,可以通过添加带有更具体代码的消息来实现

更新 根据您的后续问题:


是否有可能在域类端或控制器端执行此操作


似乎您可能希望以编程方式设置错误消息。您可以通过验证域类后添加到域类的
errors
属性来执行此操作。这是接口的一个实现,它提供了各种
rejectValue
方法,允许您以编程方式注册字段错误及其相关消息

以自定义每个域类字段,您可以使用类似

className.fieldName.matches.invalid=your error message

所述,要自定义每个域类字段,您可以使用

className.fieldName.matches.invalid=your error message

中解释了在域类端或控制器端处理它的任何方法这是更改消息的方法。。。但是,也许你的问题中还有另一个问题?您可能想知道如何捕获这些错误并显示用户友好的消息。。。然后,在保存域对象时,在控制器中使用此模式
if(!domain.save()){if(domain.hasErrors){errors=domain.errors.collect{it.message}}
然后您的
errors
变量将包含您可以在视图中显示的所有错误消息查看我在回答中提供的链接中的验证段落。您需要知道的是,在域类端或控制器端有任何处理方法这是更改消息的方法。。。但是,也许你的问题中还有另一个问题?您可能想知道如何捕获这些错误并显示用户友好的消息。。。然后,在保存域对象时,在控制器中使用此模式
if(!domain.save()){if(domain.hasErrors){errors=domain.errors.collect{it.message}}
然后您的
errors
变量将包含您可以在视图中显示的所有错误消息查看我在回答中提供的链接中的验证段落。您需要知道的是,有可能在域类端或控制器端执行此操作。感谢Donal发布此消息:)是否有机会在域类端或控制器端执行此操作感谢Donal发布此消息:)我认为您还可以从自定义验证器返回“密钥”。如果验证未通过,则返回['custom']。然后在messages.properties中,您应该匹配className.fieldName.custom。我认为您还可以从自定义验证器返回一个“键”。如果验证未通过,则返回['custom']。然后在messages.properties中,您应该匹配className.fieldName.custom