Grails命令对象验证提供异常而不是错误

时间:2017-05-02 10:38:54

标签: validation grails grails-controller

我有这样的命令对象:

 @Validateable

class TaCustomerBoardActionCommand {

TaCustomerBoardAction action

static constraints = {
    action casecade: true
}
}

以及下面命令对象中的类:

class TaCustomerBoardAction {

TaCustomerBoard taCustomerBoard
TaapAction taapAction

Date dateCreated // updated by grails
Date lastUpdated // updated by grails

User createdBy
OrgUnit orgUnit

Client client
static belongsTo = [Client]

static constraints = {
}

}

TaapAction {

int id
User createdUser
User responsibleUser
Brand brand
BusinessType businessType
Topic topic
Topic subTopic
String subject
String description
Date targetDate
int progress
String responsible
Client client
static belongsTo = [Client]
OrgUnit orgUnit
Date dateCreated // updated by grails
Date lastUpdated // updated by grails
TaapActionState taapActionState

static constraints = {
    subject nullable: false, size: 1..64
    description nullable: false, size: 1..4000
    responsible nullable: false, size: 1..512
    progress nullable: false
    responsibleUser nullable:false
    brand nullable:false
    businessType nullable:false
    topic nullable:false
    subTopic nullable:false
    targetDate nullable:false
}

TaCustomerBoard具有与上述类似的约束。 但它提供异常而不是错误代码。 下面是控制器Post方法:

    def saveTaCustomerBoardAction(TaCustomerBoardActionCommand cmd){

    if(cmd.validate()){
        taActionPlanningService.saveAction(cmd.action.taapAction)
        cmd.action.save(flush: true, failOnError: true)
    }
    [cmd:cmd]
}

堆栈追踪:

  

grails.validation.ValidationException:发生验证错误   在save()期间:        - 对象' de.idare.move.taap.TaapAction'中的字段错误在字段'进展':被拒绝的值[null];代码   [de.idare.move.taap.TaapAction.progress.typeMismatch.error,de.idare.move.taap.TaapAction.progress.typeMismatch,taapAction.progress.typeMismatch.error,taapAction.progress.typeMismatch,typeMismatch.de.idare .move.taap.TaapAction.progress,typeMismatch.progress,typeMismatch.int,typeMismatch];   论证[进展];默认消息[数据绑定失败]        - 对象' de.idare.move.taap.TaapAction'中的字段错误在字段'描述':被拒绝的值[null];代码   [de.idare.move.taap.TaapAction.description.nullable.error.de.idare.move.taap.TaapAction.description,de.idare.move.taap.TaapAction.description.nullable.error.description,de.idare .move.taap.TaapAction.description.nullable.error.java.lang.String,de.idare.move.taap.TaapAction.description.nullable.error,taapAction.description.nullable.error.de.idare.move.taap .TaapAction.description,taapAction.description.nullable.error.description,taapAction.description.nullable.error.java.lang.String,taapAction.description.nullable.error,de.idare.move.taap.TaapAction.description.nullable .de.idare.move.taap.TaapAction.description,de.idare.move.taap.TaapAction.description.nullable.description,de.idare.move.taap.TaapAction.description.nullable.java.lang.String,德.idare.move.taap.TaapAction.description.nullable,taapAction.description.nullable.de.idare.move.taap.TaapAction.description,taapAction.description.nullable.description,taapAction.description.nullable.java.lang.String ,taapAction.description.nullable,NUL lable.de.idare.move.taap.TaapAction.description,nullable.description,nullable.java.lang.String,可为空]。   参数[description,class de.idare.move.taap.TaapAction];默认   消息[类[{1}]的属性[{0}]不能为空]

请帮助我,我遇到了这个问题。

2 个答案:

答案 0 :(得分:0)

你的问题很简单。好吧,看起来,你已经提供了如何工作但实际上没有提供发送的内容。我的建议是使用验证方法在控制器操作中执行println params,以查看它的发送和验证内容。

您已宣布进度为int而非Integer。这意味着它不能为空。如果某些东西可以为空,那么总是使用布尔整数或任何情况。其次,你还宣称描述和进展为可以为空的虚假意义,必须提供它们。错误消息表明发送的命令没有作为验证的一部分发送给它的进度或描述。这是你需要通过简单的调试(如println)进一步调查,以找出原因。

  int progress
...
 static constraints = {
   progress nullable: false
   description nullable: false, size: 1..4000
 }

答案 1 :(得分:0)

只需删除failOnError: true即可。您将能够处理错误对象而不是捕获异常。

Documentation