【发布时间】:2015-05-13 14:23:37
【问题描述】:
我有一个与域对象属性有 hasMany 关系的域对象类别
class Category {
Collection<Attribute> attributes = []
static hasMany = [attributes:Attribute]
我使用脚手架生成一个多选框(与this question 中提到的非常相似的问题不同):
class CategoryController {
static scaffold = true
}
这会为视图呈现为一个选择框,例如:
<select id="attributes" class="many-to-many" size="5" multiple="multiple" name="attributes">
<option value="1">entry 1</option>
<option value="2">entry 2</option>
</select>
如果未从选择框中选择任何条目,则在发送表单时不会提交任何内容。因此,取消选择选择框中的所有条目不会被存储,而是之前存储的所有值都保持不变。
我尝试将自己的 beforeValidate 方法(见下文,类似于 a reply to the question mentioned above 中描述的解决方案)添加到我的 CategoryController 但由于脚手架它没有被执行(除非我弄错了,还有其他原因) :
def beforeValidate() {
def categoryInstance = Category .get(params.id)
if (!categoryInstance ) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'categoryInstance.label', default: 'Category'), params.id])
redirect(action: "list")
return
}
if (!(params?.attributes)) {
categoryInstance.attributes.clear()
}
}
我不知道现在该做什么。放弃这个控制器的脚手架并使用我自己的beforeValidate 方法?保持脚手架并在其他地方实现该方法?做点别的吗?
【问题讨论】:
标签: grails multi-select scaffolding