【问题标题】:grails controller: access to parameter that has a list of elementsgrails 控制器:访问具有元素列表的参数
【发布时间】:2013-07-02 08:17:33
【问题描述】:

我需要访问存储在参数中的项目,该参数表示多选中的选定元素。我使用以下代码将所选项目从 gsp 传递到控制器到 remoteFunction:

params: '\'receiptItemsSelected=\' + jQuery(this).val()'

现在,按照讨论 here 中找到的代码,我使用闭包来获取每个值,但如果我执行多选,receiptItemsSelected 的大小始终为 1,但值是,例如,1,2。为了将值作为列表获取,我在控制器中完成了以下操作

params.list("receiptItemsSelected")

但是如果我在多选中选择两个项目,它不会给我两个元素,但总是一个元素。 问题是:如果我选择两个元素,如何获取每个元素并在控制器中使用它?我怎样才能将这些元素设为 Long 而不是 String? 谢谢

【问题讨论】:

    标签: list grails controller


    【解决方案1】:

    如果您的参数以列表的字符串表示形式传递,例如:

    http://yoursite.com/?receiptItemsSelected=1,2,3
    

    您必须使用普通的 Groovy 字符串操作来拆分值并自己执行类型转换:

    def receiptsAsLongs = params.receiptItemsSelected.split(',')*.toLong()
    

    如果您的参数是按照重复参数的约定传递的,则会列出一个列表,例如:

    http://yoursite.com/?receiptItemsSelected=1&receiptItemsSelected=2
    

    然后 grails 可以使用 params.list() 将其转换为列表,但您必须进行最后的 StringLong 的转换:

    def receiptsAsLongs = params.list('receiptItemsSelected')*.toLong()
    

    【讨论】:

    • 这是否适用于仅选择一项的情况?
    • params.list 会将 1 项转换为列表,但不会有逗号,因此receiptsAsLongs.each { ...
    【解决方案2】:

    params.list() 用于多值参数,即如果你有它会工作

    receiptItemsSelected=1&receiptItemsSelected=2
    

    使用serialize() 而不是val() 来构建请求正文可能会更幸运。

    【讨论】:

    • 如果我使用 serialize() 而不是 val() 我一次只能获得一个值,而不是所有值;另外,这些值就像'value=1',但我只需要'1',因为它是我用来进行计算的元素的 id。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多