【问题标题】:Grails: How to handle multi-select in controller with scaffolding while storing with no selection?Grails:如何在没有选择的情况下使用脚手架处理控制器中的多选?
【发布时间】: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


    【解决方案1】:

    在阅读了几个网站后,grails 的脚手架只是为了提供一个粗略的轮廓,需要填充以实现更细粒度的行为,我选择了上述脚手架并创建了自己的控制器和视图,然后通过修改它们来适应它们更新方法。 对于此问题的未来访问者,以下是创建控制器和视图的方法: https://grails.github.io/grails-doc/latest/ref/Command%20Line/generate-all.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      相关资源
      最近更新 更多