【问题标题】:Grails Error CodeGrails 错误代码
【发布时间】:2015-03-06 20:56:37
【问题描述】:

我试图从与 Grails 中的域对象交互时引发的异常中确定错误代码是什么。

我有一个具有一些字段验证的数据库,其中一个验证是特定列必须是唯一的。根据文档,它将给出className.propertyName.unique(http://grails.org/doc/latest/ref/Constraints/unique.html) 的错误代码。当我将控制器包装在 try catch 块中时。我可以这样捕获各种验证异常:

catch (grails.validation.ValidationException e) {  
    exception handling code here  
}    

如何访问错误代码?我想做If the Error Code = className1.propertyName2.unique之类的事情,然后回复propertyName2 is not unique

当我执行保存操作时,我确实将“failOnError: true”设置为参数。

谢谢!

【问题讨论】:

  • 只需在messages.properties 文件中添加className1.propertyName2.unique=propertyName2 is not unique,grails 你工作了吗?不需要捕获。
  • 我现在没有时间详细介绍并给您一个超级棒的答案,但是,简短而肮脏的答案是,当您尝试保存 domain object它失败了,它会悄悄地这样做,但你应该在里面有一个叫做errors的东西,它会给你错误。它看起来像这样: def domainObject = new DomainObject(params) if(!domainObject.save()){ domainObject.each{ print(it) } } 这又快又脏而且不完整,但应该让你得到你想要的需要。
  • e.getErrors().getFieldError() 是一个包含 20 个错误的数组,其中一项是文档中的错误代码。如果那里存在错误代码,我是否应该每次都检查该数组? --- @user1690588 我的messages.properties 中确实有这个设置。即使我检查了数组并将其打印出来,它也不会将其从 lassName1.propertyName2.unique 更改为 propertyName2 is not unique --- TedDelezene,我设置了它如果它不起作用,就会失败。你知道是否有例外的方法吗?
  • 在捕获异常后,您可能仍然在原始域对象中拥有错误列表,因此您应该能够以相同的方式处理内部错误domainObject.errors.each{ render it } 或任何您想用它做的事情...或者您可以使用相同的技术在错误时抛出您自己的异常,但我通常不会那样处理它,通常如果一个对象没有正确保存,我会渲染一个特定的模板来枚举来自我使用eachError taggrails.org/doc/latest/ref/Tags/eachError.html)传递给它的域对象
  • 感谢您的帮助,我最终基本上做到了(见下面的帖子)

标签: grails grails-orm unique-constraint grails-domain-class grails-validation


【解决方案1】:

错误代码深埋在对象内部。它将是通过调用以下代码返回的列表中的项目之一,其中“e”是异常对象。

e.getErrors().getFieldError()

您还可以通过调用以下命令从异常中获取代码(在本例中为“唯一”):

e.getErrors().getFieldError().getCode()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2014-03-09
    相关资源
    最近更新 更多