2013-01-23 88 views
1

我的頁面中有兩個struts2 jQuery網格。我必須在第一個網格的行點擊加載第二個網格。我在第一個網格中添加了一個rowselect事件偵聽器,並且在該方法中,我嘗試重新加載網格。重新加載struts2 jquery網格行另一個網格點擊

$("#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方法獲得幾次的每一個動作。當我在調試模式下運行應用程序時,我發現操作類執行方法被調用了三次。其中,來自jsp頁面的選定值被綁定到動作類變量兩次和第三次,值爲空。
  2. 當我觸發ajax函數的success重新加載網格事件時,操作類params被設置爲null,所以我無法繼續進行數據提取。

1格

<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> 

Action類:

//Form variables/getter setters 

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

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

請讓我知道缺少的東西。

+0

爲什麼當struts2可以將你的響應轉換爲json給你時,你需要'getJSON'方法? – Quincy

回答

0

在閱讀你的代碼後,我想你應該像這樣重新加載網格。

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

將屬性reloadTopics添加到您的網格,並在需要時發佈。這有一些好處,再次平原觸發reloadGrid。例如formIds屬性fas也受到尊重。

<sjg:grid id="myGrid" reloadTopics="reloadMyGridTopic" ... /> 

<script> 
$.publish("reloadMyGridTopic"); 
</script> 
0
$("#dgJobsDetailMain").jqGrid('setGridParam',{url:'/context/action_name?param1='+value1+"&param2="+value2}).trigger("reloadGrid"); 

這解決了我的問題。 奇怪,因爲我嘗試了與s:url and s:param相同的事情。它沒有工作。

-Karthick

0

嘗試這種情況:

 $.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(列表);