Grails 验证错误为 Set 或 no duplicates
Grails Validation errors as Set or no duplicates
父对象 A 和子对象 B(贡献)之间存在一对多关系。子对象中的字段取决于父对象中字段的特定 selection。父级的保存是级联的,因此父级和子级的所有验证消息同时发生。
当验证错误发生时,多个子对象之间没有可用的区分(即没有名称。我们可以使用 ID 但用户不想在 UI 中看到 ID 所以这将毫无意义)。如何删除子项的重复错误消息或将其设置为一组以便仅显示 1 条特定类型的消息?
Object A
InitiativeType initiative
static hasMany = [ contributions: Contribution ]
Contribution
SpecialCategory specialCategory
static constraints = {
specialCategory nullable: true, validator: { val, obj ->
if ((val && val.id > 53 && val.id < 75) && !obj.A.initiative?.contains(5) ) { // special initiative
return ['specialValidation']
}
}
SpecialCategory 中的某些 ID 仅在某个 Initiative ID 被 selected 时才有效。否则,抛出验证错误 "Special Category [ID] requires you to select Initiative [Required_Initiative_Name]"
就目前而言,如果用户创建多个使用相同 SpecialCategory ID 且未 select 编辑适当倡议的贡献,则可能会多次看到相同的错误消息。验证消息可以是一组吗?还是我必须遍历所有错误并尝试删除错误(严重)?
有更好的方法来处理这个问题(例如,当未 select 编辑特定倡议时,不在 select 中显示某些特殊类别),但这是用户组所要求的。我目前正在努力以更正确的方式进行。
我不得不在我的 GSP 中分解我的错误输出块。这似乎工作正常:
<g:eachError var="err" bean="${A}">
<g:if test="${err.code != 'specialValidation'}"> <!-- show message later to remove duplicates -->
<g:message error="${err}" /><br />
</g:if>
</g:eachError>
<g:if test="${A?.contributions?.errors?.size == 1}">
A Contribution with a Special Category must also include the Special Initiative.
</g:if><g:elseif test="${A?.contributions?.errors?.size > 1}">
Contributions with a Special Category must also include the Special Initiative. There are currently ${a?.contributions?.errors?.size} in error.
</g:elseif>
父对象 A 和子对象 B(贡献)之间存在一对多关系。子对象中的字段取决于父对象中字段的特定 selection。父级的保存是级联的,因此父级和子级的所有验证消息同时发生。
当验证错误发生时,多个子对象之间没有可用的区分(即没有名称。我们可以使用 ID 但用户不想在 UI 中看到 ID 所以这将毫无意义)。如何删除子项的重复错误消息或将其设置为一组以便仅显示 1 条特定类型的消息?
Object A
InitiativeType initiative
static hasMany = [ contributions: Contribution ]
Contribution
SpecialCategory specialCategory
static constraints = {
specialCategory nullable: true, validator: { val, obj ->
if ((val && val.id > 53 && val.id < 75) && !obj.A.initiative?.contains(5) ) { // special initiative
return ['specialValidation']
}
}
SpecialCategory 中的某些 ID 仅在某个 Initiative ID 被 selected 时才有效。否则,抛出验证错误 "Special Category [ID] requires you to select Initiative [Required_Initiative_Name]"
就目前而言,如果用户创建多个使用相同 SpecialCategory ID 且未 select 编辑适当倡议的贡献,则可能会多次看到相同的错误消息。验证消息可以是一组吗?还是我必须遍历所有错误并尝试删除错误(严重)?
有更好的方法来处理这个问题(例如,当未 select 编辑特定倡议时,不在 select 中显示某些特殊类别),但这是用户组所要求的。我目前正在努力以更正确的方式进行。
我不得不在我的 GSP 中分解我的错误输出块。这似乎工作正常:
<g:eachError var="err" bean="${A}">
<g:if test="${err.code != 'specialValidation'}"> <!-- show message later to remove duplicates -->
<g:message error="${err}" /><br />
</g:if>
</g:eachError>
<g:if test="${A?.contributions?.errors?.size == 1}">
A Contribution with a Special Category must also include the Special Initiative.
</g:if><g:elseif test="${A?.contributions?.errors?.size > 1}">
Contributions with a Special Category must also include the Special Initiative. There are currently ${a?.contributions?.errors?.size} in error.
</g:elseif>