检索复选框数组并从控制器(grails)视图中选择框

时间:2012-06-05 15:27:48

标签: grails

我正在查看一些旧代码,并且我正在尝试达到附加所选联系实例ID(复选框)的目标,并选择要用远程字段填充的报告框。例如,这是传递给控制器​​的参数:

  

[id:1,reportsToResults:[x,y,z,],reportsTo.id:[56,55,55],   reportsTo:[id:[56,55,55]],contactList:[55,57],_ contact类:[,,,   ],_ select:,action:index,controller:tempController]

我理论上需要的是这样的东西:

contactList:[ , , 55, 57, ] (where empty spaces are checkboxes that are NOT selected.    
reportsTo.id:[ , , 56, 56, ] (where empty spaces are empty selection boxes.

如何传递值数组?因为我可以传递所有的contactList ID和reportsTo.id - 但是我无法根据数组槽正确匹配它们或将它们绑在一起。

任何想法:?

<!doctype html>
<html>
    <head>
        <meta name="layout" content="main">
    </head>
    <body>
        <div id="company-roster" class="company-roster">
        <h1>${companyName} Roster</h1>
            <g:form>
                <g:hiddenField name="id" value="${id}" />
                <div class="choicePanel">
                    <div class="choicePanel-reportsTo">
                        <label>Save all reports to additions:</label>
                        <g:actionSubmit value="Update Reports To" action="addReportsTo"/>
                    </div>
                </div>
                <script>
                    function all() {
                        $(':checkbox[name=select]').click (function () {
                          $(':checkbox[name=contactList]').prop('checked', this.checked);
                        });            
                    }
                </script>
                <div style="position:absolute; margin-top:10px; width: 1350px; height: 650px; overflow: auto;">
                <table>
                    <thead>
                        <tr>
                            <th><g:checkBox name="select" onclick="all();"/></th>
                            <g:sortableColumn property="firstName" action="roster" title="${message(code: 'contact.firstName.label', default: 'First Name')}" />
                            <g:sortableColumn property="lastName" action="roster" title="${message(code: 'contact.lastName.label', default: 'Last Name')}" />
                            <th>Reports To</th>
                        </tr>
                    </thead>
                    <tbody>
                        <g:each in="${companyRoster}" status="i" var="contactInstance">
                                <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">

                                <td><g:checkBox name="contactList" value="${contactInstance.id}" checked="${false}"/></td>
                                <td>${fieldValue(bean: contactInstance, field: "firstName")}</td>
                                <td>${fieldValue(bean: contactInstance, field: "lastName")}</td>
                                <td>
                                    Reports To: <g:remoteField action="getReportsToResults" controller="contact" id="" update="rtResult_${contactInstance.id}" paramName="search" name="reportsToResults" value="" />
                                    <br/>
                                    <g:each in ="${contactInstance?.reportsTo}" var="reportsTo" status="x">
                                        <li style="list-style-type:none;">${reportsTo}<g:link controller="contact" action="removeReportsTo" params="${[reportsToID: reportsTo.id, contactInstanceID: contactInstance.id, comp_id:id]}">Remove</g:link></li>
                                    </g:each>
                                </td>
                                <td>
                                    <div id="rtResult_${contactInstance.id}" class="rtResult_${contactInstance.id}">
                                        <g:select name="reportsTo.id" from="${rtResults}" value="" />
                                    </div>
                                </td>
                                </tr>
                        </g:each>
                    </tbody>
                </table>
                </div>
            </g:form>
        </div>
    </body>
</html>

1 个答案:

答案 0 :(得分:3)

我通常通过为表单上的每个复选框提供一个唯一且可识别的名称以及它在hiddenField中引用的相应ID来表达...

<g:checkBox name="contact.${i}.checkBox" checked="${false}"/>
<g:hiddenField name="contact.${i}.id" value="${contactInstance.id}" />

上面,我使用i循环中的g:each变量,这将确保每个变量都是顺序且唯一的。

接下来,您需要在g:form中存储项目数,以便您的控制器操作知道要查找的checkBox参数的数量,如此(g的一侧:每个但在{{} 1}})...

g:form

最后,您可以遍历<g:hiddenField name="contactCount" value="${companyRoster.size()}" /> 地图并处理选定或未选择的地图。

params

有几种方法可以解决这个问题,但上述解决方案是我一直以来的方式。代码没有经过语法测试,只是在我的头顶,但希望你能得到这个想法。享受!