2015-05-13 16 views
1

我有一个的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方法?保持脚手架并在其他地方实施该方法?做别的事吗?

回答

相关问题