我有这样的命令对象:
@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}]不能为空]
请帮助我,我遇到了这个问题。
答案 0 :(得分:0)
你的问题很简单。好吧,看起来,你已经提供了如何工作但实际上没有提供发送的内容。我的建议是使用验证方法在控制器操作中执行println params
,以查看它的发送和验证内容。
您已宣布进度为int
而非Integer
。这意味着它不能为空。如果某些东西可以为空,那么总是使用布尔整数或任何情况。其次,你还宣称描述和进展为可以为空的虚假意义,必须提供它们。错误消息表明发送的命令没有作为验证的一部分发送给它的进度或描述。这是你需要通过简单的调试(如println)进一步调查,以找出原因。
int progress
...
static constraints = {
progress nullable: false
description nullable: false, size: 1..4000
}
答案 1 :(得分:0)
只需删除failOnError: true
即可。您将能够处理错误对象而不是捕获异常。