Перезагрузить struts2 Jquery Grid при щелчке строки другой сетки

У меня есть две сетки jQuery struts2 на моей странице. Я должен загрузить вторую сетку по щелчку строки первой сетки. Я добавил прослушиватель событий 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. Метод выполнения действия получает несколько раз для каждого действия. Когда я запустил приложение в режиме отладки, я обнаружил, что метод выполнения классов действий вызывается три раза. из которых выбранные значения со страниц jsp были дважды привязаны к переменной классов действий, а в третий раз значения были нулевыми.
  2. И когда я запускаю событие сетки перезагрузки в success функции ajax, для параметров класса действия устанавливается значение 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);
}
);

2-я сетка

<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();
}

Пожалуйста, дайте мне знать, чего не хватает.


person Karthick R    schedule 23.01.2013    source источник
comment
Зачем вам нужен метод getJSON, когда struts2 может преобразовать ваш ответ в json для вас?   -  person Quincy    schedule 25.01.2013


Ответы (4)


Прочитав ваш код, я думаю, вам следует перезагрузить сетку следующим образом.

var grid = jQuery("#yourGridId");
grid.trigger("reloadGrid");
person arvin_codeHunk    schedule 24.01.2013

Добавьте атрибут reloadTopics в свою сетку и опубликуйте его, если вам это нужно. У этого снова есть некоторые преимущества: простой триггер reloadGrid. Например, атрибут formIds также соблюдается.

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

<script>
$.publish("reloadMyGridTopic");
</script>
person Johannes    schedule 24.01.2013

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

Это решило мою проблему. Странно, так как я пробовал то же самое с s:url and s:param. Это не работает.

-Картик

person Karthick R    schedule 28.01.2013

Попробуй это:

      $.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(список);

person madhu pathy    schedule 12.02.2015