在Struts2中作为表单的一部分提交时,如何捕获jquery网格中的选定行

时间:2014-01-07 19:17:53

标签: jquery struts2

我正在使用jquery grid和Struts2。我已成功显示jquery网格。现在我想从jquery网格中选择行以及网格外的其他数据,并在我的struts动作中提交以进行处理。我从jquery网格中检索数据时遇到问题。任何人都可以帮助我如何访问我在我的行动中从jquery网格中选择的行?

这是我的jquery网格:

<s:form action="runTest" method="post">
                <sjg:grid
                    id="gridTable"
                    formIds="mcp"
                    caption="Test Scripts"
                    dataType="json"
                    href="%{searchurl}"
                    pager="true"
                    gridModel="gridTDP"
                    rowList="10,15,20,30"
                    rowNum="30"
                    multiselect="true"
                    viewrecords="true"
                    reloadTopics="reloadItems"
                    loadonce="false"
                    viewsortcols="[true, 'horizontal', true]"
                    resizable="true"
                >

                    <sjg:gridColumn name="idTestData"
                        index="idTestData"
                        key="true"
                        title="idTestData"
                        formatter="integer"
                        hidden="true"
                    />

                    <sjg:gridColumn name="testName"
                        index="testName"
                        title="Test Name"
                        width="50"
                        sortable="true"
                        search="true"
                        searchoptions="{sopt:['eq','ne','lt','gt']}"
                    />
                    <sjg:gridColumn
                        name="projectName"
                        index="projectName"
                        title="Project Name"
                        width="300"
                        sortable="true"
                        edittype="text"
                    />

                </sjg:grid>

                <sj:submit value="Execute Test Scripts"/>
            </s:form>

这是成功调用但未获取jquery网格行的runTest.action:

public String runTest() throws Exception{

        Iterator<Test> gridIterator = gridTDP.iterator();

        System.out.println(" running test--");
        while(gridIterator.hasNext()){

            System.out.println(" in the gridIterator");
        }

        return "success";
    }

2 个答案:

答案 0 :(得分:2)

如果我是对的,我认为这可行。如果不让我知道。

var checks=$("#gridtable").find('input[type=checkbox]');
               var va =new Array();
              // alert(checks.length);
                for(var i=0;i<checks.length;i++)
                    {
                        if(checks[i].checked)
                            {
                             var p = checks[i].parentNode.parentNode;
                             var id=p.id;

                            va.push($("#gridtable").jqGrid('getCell',id,'cellvalue'));
                //          alert(va);
                            }
                    }
               document.getElementById("hiddenVariableID").value=va; 

cellvalue是您要发送给操作类的值。 我认为在你的情况下它可以是任何列名。

在你的jsp中添加这行

<s:hidden id="hiddenVariableID" name="selectedRows" />

在您的操作类中为Getters创建settersselectedRows,类型为array

答案 1 :(得分:0)

为了解决这个问题,我使用了“looser”中提到的代码(非常感谢),并做了一些修改。我没有将selectedRows的值视为数组,而是将其视为具有逗号分隔值的String,例如,abc,def。然后在我的动作类中,我使用StringTokenizer来解析String以获取值。这是我的行动方法:

public String runTest() throws Exception{

        System.out.println(" running test--");
        StringTokenizer ids = new StringTokenizer(selectedRows, ",");
        while (ids.hasMoreTokens()) {
            int removeId = Integer.parseInt(ids.nextToken());
            System.out.println(" test id is " + removeId);
        }
        return "success";
    }