Grails Grail:@BindUsing中的错误处理

Grails Grail:@BindUsing中的错误处理,grails,data-binding,grails3,Grails,Data Binding,Grails3,我尝试将@bindsusing用于域类(TcTransaction)的属性(amt100)。其目的是将显示格式转换为数据库格式。在十几种变体中,有一种: @BindUsing({tcTransaction, source -> def result = tcTransaction.amt100 def amt = Amount100.of(source['amt100']) //parse and convert input if (amt) { result = am

我尝试将@bindsusing用于域类(TcTransaction)的属性(amt100)。其目的是将显示格式转换为数据库格式。在十几种变体中,有一种:

@BindUsing({tcTransaction, source ->
  def result = tcTransaction.amt100
  def amt = Amount100.of(source['amt100']) //parse and convert input
  if (amt) {
    result = amt.cents
  } else {
    tcTransaction.errors.rejectValue('amt100', 'tcTransaction.invalid.amount')
  }
  return result
      })
Integer amt100
它在没有错误的情况下工作得很好。问题在于错误管理。如果新值无效,此特定版本将返回原始值。它还向域对象添加了一个错误

增加错误似乎没有效果。不会警告用户

我还试图抛出一个异常。无论抛出什么异常,最终都会出现一个标准错误代码,表示属性不能为空。A表明了这种行为。(已经有两年没有答案了。)我使用Grails 3.2.8


那么,在@BindUsing中有错误管理的理论吗?这是一个非常漂亮的机械装置。

嗨,索达斯特拉姆!你能解决这个问题吗?我也面临同样的问题。无论我在@BindUsing中抛出什么异常,它都会被破坏成其他东西。没有关于如何正确处理异常的文档。我有一个黑客。我的问题提到金额。另一个例子是瑞典邮政编码。两者都是具有特定显示格式的整数,每个都有一个专用类。我为他们创建了一个“nullOnError”方法,该方法扫描输入字符串,如果无效,则返回null。该方法在@BindUsing中使用,也在控制器中使用,在控制器中,我对原始输入字段重复检查,通常是在“更新”操作中。我从未设法让例外为我工作。