在grails中循环遍历arraylist的最佳方式

时间:2017-08-21 08:25:50

标签: javascript arrays grails arraylist groovy

我正在向我的控制器发送字符串数组,其中包含Ids数组。

function submit(){
        var ids = [];
        bootbox.confirm("Are you sure to send data?", function(confirmed){
            if(confirmed){
                $('input[id^="tdCheckbox_"]').each(
                    function () {
                        var $this = $(this);
                        if($this.is(":checked")){
                            ids.push($this.attr("id").replace("tdCheckbox_",""));
                        }
                    }
                );

                $("#Ids").val(ids);
                $("#submitForm").submit();
            }
        });
}

<g:formRemote name="submitForm"  url="[controller:'myController', action:'submit']" onSuccess="removeIds(data)">
    <g:hiddenField name="Ids" />
</g:formRemote>

控制器:

def submit(){
        def result = [success:false]
        if(params?.Ids){
            String[] ids = params?.Ids
            ids.eachWithIndex{ it, int i ->
                //HERE OUTPUT IS LIKE 
                //4 
                //,
                //5
                //,
                //6
                println(it.value)
            }

            result["id"] = params?.Ids
        }

        render result as JSON
    }

在eachWithIndex循环中,我得到输出,(逗号)我不需要,我认为必须有一个很好的选择来循环它。

请同样建议。

1 个答案:

答案 0 :(得分:1)

您从javascript提交一个字符串值(使用逗号分隔的ID)的问题

ids=1,2,33

并且在groovy / grails的级别上params?.Ids只返回一个像这样的字符串:"1,2,33"

并将String分配给String[]只是按字母分割...

作为groovy中的解决方法,您可以使用params?.Ids?.split(',')

String[] ids = "1,2,33".split(',')

或通过javascript提交多个值,如下所示:

ids=1 & ids=2 & ids=33

在这种情况下,如果多于一个以相同名称提交的值,grails将为params?.Ids表达式返回一个数组