我有一个的hasMany关系到域对象域对象类别属性Grails:在没有选择存储的情况下如何处理脚手架控制器中的多选?
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>
当不selecti从选择框中输入任何条目,发送表单时不会提交任何内容。因此,取消选择选择框中的所有条目不会被存储,而是之前存储的所有值仍然保留。
我尝试添加一个自己的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()
}
}
我不知道该怎么做。 Forego脚手架为这个控制器并且使用我自己的beforeValidate
方法?保持脚手架并在其他地方实施该方法?做别的事吗?