一次性在Grails中发布所有传入参数

POSTing all incoming params in Grails at once

本文关键字:参数 布所 Grails 一次性      更新时间:2023-09-26

我在Grails中有以下JavaScript函数:

function requestPost() {
        var projectNameFilter = $("input[name='project-name-filter']").val();
        var addressFilter = $("input[name='address-filter']").val();
        $.post(
                '${createLink(controller: "listing", action: "transactions")}',
                {
                    projectNameFilter: eval(projectNameFilter),
                    addressFilter: eval(addressFilter),                        
                    listingType: "${params?.listingType}",
                    propertyType: "${params?.propertyType}",
                },
                function (data, status) {
                    $('#dynamic-table').html(data);
                }
        );
    }

请注意以下两个参数:

  • listingType:"$ {params ? .listingType} "
  • propertyType:"$ {params ? .propertyType} "

我在这个方法中有很多这样的参数,它们都应该被传递到控制器中。

现在我的问题是:尽管重复做这样的整个过程,我怎么能一次传递所有这些参数

由于您的目标是使用javascript传递所有参数,因此呈现的html需要显式地包含所有参数。因此,不可能有一个内置的解决方案(如果你不想使用会话,不愿意使用弃用的remoteFunction标签)。一种解决方法是迭代所有参数并插入它们。注意,这可能是一个安全问题:

$.post('${createLink(controller: "listing", action: "transactions")}',
{
<g:each in="${params}" var="paramKeyValue">
   '${paramKeyValue.key}': '${paramKeyValue.value}',
</g:each>
},...)

我建议这样做:

<g:each in="${['listType', 'propertyType']}" var="paramKey">
   '${paramKey}': '${params."${paramKey}"}',
</g:each>

你也可以这样做:

${params.subMap(['listType', 'propertyType']) as JSON}