代码之家  ›  专栏  ›  技术社区  ›  Syed Sarek

将多个选定下拉列表值保存到Grails中的单个列中

  •  0
  • Syed Sarek  · 技术社区  · 7 年前

    如何在Grails中将多个选定下拉值保存到单个列中?

    <g:select name="item1Price" from="${1..10}"/>
    <g:select name="item2Price" from="${1..10}"/>
    <g:select name="item3Price" from="${1..10}"/>
    

    ItemPrice: 2,8,6
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Daniel    7 年前

    如果您有域对象Foo:

    class Foo {
        String itemPrice
    }
    

    然后在控制器操作中,您可以执行以下操作:

    def save() {
        Foo f = new Foo()
        f.itemPrice = [params.item1Price, params.item2Price, params.item3Price].join(",")
        f.save()
    }
    

    实际上,您所要做的就是将页面中的参数连接到一个字符串中,对吗?

    在我看来,这实际上是一个糟糕的设计。如果订单发生变化,或者没有为第2项选择任何内容,会发生什么?或者,如果有人想要编辑您的对象,而您需要重新解析这些值,该怎么办?很明显,你可以用逗号分割…直到其中一个值包含逗号!

    最好为每个表示不同内容的字段存储一个值,或者将单个字段存储为结构化值。例如,如果你真的只想在你的域对象中有一个字段,你可能需要考虑将一个映射编码成JSON并存储它。