【问题标题】:Reload struts2 Jquery Grid on row click of another grid在另一个网格的行单击时重新加载 struts2 Jquery Grid
【发布时间】:2013-01-23 13:36:41
【问题描述】:

我的页面中有两个 struts2 jQuery 网格。我必须在第一个网格的行单击时加载第二个网格。我在第一个网格中添加了一个rowselect 事件侦听器,并在该方法中尝试重新加载网格。

$("#dgJobsDetailMain").jqGrid().trigger("reloadGrid");

我也尝试触发 Ajax 请求

function populateJobRunDetails(jobName,dbSid)
{
    $.ajax({
        url: "ecmComparisonJobDetailDataAction?jobId="+jobName+"&selectedDbSid="+selectedDbSid+"&date="+new Date().getTime()+"&rowClicked=true",
        type: "GET",
        dataType: "json",
        success: function(data,textStatus,jqXHR)
        {
            //$("#dgJobsDetailMain").jqGrid().trigger("reloadGrid");
        },
        error:function(jqXHR, textStatus, errorThrown)
        {
            alert('error');
        }   
      }); 
}

我的问题是

  1. Action 的 execute 方法会为每个操作执行多次。当我在调试模式下运行应用程序时,我发现动作类执行方法被调用了 3 次。其中,jsp页面中选中的值两次绑定到action classes变量,第三次绑定为null。
  2. 当我在 ajax 函数的 success 上触发重新加载网格事件时,操作类参数设置为 null,因此我无法继续进行数据提取。

第一个网格

<sjg:grid viewrecords="true" formIds="ecmComparisonMainForm" reloadTopics="reloadDataGrid" pagerPosition="center" onSelectRowTopics="rowselect" id="dgJobsMain" caption="Job List" dataType="json"  href="%{ecmComparisonDataActionUrl}" pager="true"  
            gridModel="gridModel"  rowList="4,6,8" rowNum="5"  rownumbers="true" height="150" width="1200">        
             <sjg:gridColumn name="jobId" index="jobId"  title="Job ID" hidden="true" />
             <sjg:gridColumn name="jobName" index="jobName"  title="Job" sortable="true" />
             <sjg:gridColumn name="jobDescription" index="jobDescription" title="Job Description"  sortable="true"/> 
             <sjg:gridColumn name="database" index="database" title="Database" sortable="false" /> 
             <sjg:gridColumn name="sourceSchema" index="sourceSchema" title="Source Schema" sortable="false"/> 
             <sjg:gridColumn name="targetSchema" index="targetSchema" title="Target Schema" sortable="true"/>
             <sjg:gridColumn name="prDescription" index="prDescription" title="PR Description" hidden="true" sortable="false"/>
             <sjg:gridColumn name="createdDate" index="createdDate" title="Created Date" sortable="false"/>
             <sjg:gridColumn name="createdBy" index="createdBy" title="Created By" sortable="false"/>
</sjg:grid>

行选择功能

$.subscribe('rowselect', function(event, data) 
{
    rowClicked = true;
    var grid = event.originalEvent.grid; 
    var sel_id = grid.jqGrid('getGridParam', 'selrow'); 
    var jobName = grid.jqGrid('getCell', sel_id, 'jobName');

    var dbSid = document.getElementById('schemaDbSid');
    $("#dgJobsDetailMain").jqGrid().trigger("reloadGrid");
    //populateJobRunDetails(jobName,dbSid.value);
}
);

第二格

<sjg:grid pagerPosition="center" id="dgJobsDetailMain" caption="Job Details List" dataType="json"  href="%{ecmJobRunDetailsActionUrl}" pager="true"  
            gridModel="jobsDetailGridModel"  rowList="4,6,8" rowNum="5"  rownumbers="true" height="150" width="1200">        
             <sjg:gridColumn name="runId" index="runId"  title="Run" sortable="true" />
             <sjg:gridColumn name="startDate" index="startDate" title="Start Time"  sortable="true"/> 
             <sjg:gridColumn name="endDate" index="endDate" title="End Time" sortable="false" /> 
             <sjg:gridColumn name="status" index="status" title="Run Status" sortable="false"/> 
             <sjg:gridColumn name="statusMsg" index="statusMsg" title="Status Details" sortable="true"/>
</sjg:grid>

动作类:

//Form variables/getter setters

public String execute()
{
// code to database
}

public String getJSON()
{
return execute();
}

请让我知道缺少什么。

【问题讨论】:

  • struts2 可以为您将响应转换为 json,为什么还需要 getJSON 方法?

标签: struts2 struts2-jquery struts2-jquery-grid


【解决方案1】:

看完你的代码,我猜你应该像这样重新加载网格。

var grid = jQuery("#yourGridId");
grid.trigger("reloadGrid");

【讨论】:

    【解决方案2】:

    将属性 reloadTopics 添加到您的 Grid 并在需要时发布它。这有一些好处,再次简单触发 reloadGrid。例如,formIds 属性也受到尊重。

    <sjg:grid id="myGrid" reloadTopics="reloadMyGridTopic" ... />
    
    <script>
    $.publish("reloadMyGridTopic");
    </script>
    

    【讨论】:

      【解决方案3】:
      $("#dgJobsDetailMain").jqGrid('setGridParam',{url:'/context/action_name?param1='+value1+"&param2="+value2}).trigger("reloadGrid");
      

      这解决了我的问题。 奇怪,因为我用s:url and s:param 尝试了同样的事情。它不起作用。

      -卡西克

      【讨论】:

        【解决方案4】:

        试试这个:

              $.ajax({
                    url: "myAction.action", cache: false, dataType: 'json', data: "Id=" +
                            Id,
                    success: function (data) {
                        var jsonData = JSON.stringify(data.jsonResponse);
                        var parsedData = JSON.parse(jsonData);
                        if (parsedData.hasResults) {
                            var myData = parsedData.jsonResults;
                            $(document).ready(function () {
                                var allParameters = $("#gridModel").jqGrid("getGridParam");
                                allParameters.data = myData;
                                $("#gridModel").trigger('reloadGrid');
        
                            });
                        }
                    } });
        

        在你的动作类中,将网格列表设置为json响应:

        jsonResponse = JsonResponses.collectionResponse(list);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-30
          • 2011-09-18
          • 2014-03-24
          • 1970-01-01
          相关资源
          最近更新 更多