2013-01-07 40 views
0

我使用JSP开发Web应用程序& Servlet(IDE:Eclipse,Database:Oracle10)。jqgrid删除:无法获取值

我使用JQGRID以表格格式显示数据。我还希望在JQGRID中添加,编辑,删除功能。到目前为止,我已完成编辑功能。

现在我想Delete的功能,问题是我不能pass data from JQGRID to servlet

以下是我的源代码:

jQuery("#list10_d2").jqGrid({ 
       height: "100%", 
       url:'ProtocolJGridServChildStages?q=2&action=protStages', 
       datatype: "xml", 
       colNames:['Sr. No.','PROTOCOL_ID', 'STAGE_ID', 'DESCRIPTION'], 
       colModel:[{name:'srNo',index:'srNo', width:35,sortable:true}, 
          {name:'PROTOCOL_ID',index:'PROTOCOL_ID', width:100,sortable:false}, 
          {name:'STAGE_ID',index:'STAGE_ID', width:100,sortable:false}, 
          {name:'DESCRIPTION',index:'DESCRIPTION', width:150,sortable:false,editable:true} 
          ], 
       rowNum:5, 
       rowList:[2,4,10], 
       pager: '#pager10_d2', 
       sortname: 'PROTOCOL_ID', 
       viewrecords: true, 
       sortorder: "asc", 
       multiselect: true, 
       editurl: "ProtocolJGridServChildStages?action=protocolStageEdit", 
       caption:"CRM_PROT_STAGES", 
       onSelectRow: function(ids) 
       { 
        if(ids && ids!==lastsel) 
        {    
         var ret = jQuery("#list10_d2").jqGrid('getRowData',ids); 
         protID = ret.PROTOCOL_ID; 
         alert(protID); 
         stageID = ret.STAGE_ID; 
         alert(stageID); 

         jQuery("#list10_d2").jqGrid('setGridParam',{}, {editurl:'ProtocolJGridServChildStages?action=protocolStageEdit&protID='+protID+'&stageID='+stageID}); 
         jQuery('#list10_d2').jqGrid('restoreRow',lastsel); 
         jQuery('#list10_d2').jqGrid('editRow',ids,true); 
         lastsel=ids; 
        } 
       } 
      }); 
      jQuery("#list10_d2").jqGrid('navGrid','#pager10_d2',{add:true,edit:true,del:true},{width:500},{width:500,url: 'ProtocolJGridServChildStages?action=protocolStageAdd&protID='+protID, closeAfterAdd: true},{mtype: 'GET',url: 'ProtocolJGridServChildStages?action=protocolStageDelete&protID='+protID}); 
      jQuery("#ms1").click(function() { 
       var s; 
       s = jQuery("#list10_d2").jqGrid('getGridParam','selarrrow'); 
       alert(s); 
      }); 

我越来越protIDundefinedDeleteServlet

回答

3

您在url中以错误的方式使用protID。用于删除操作的url选项的值将在执行navGrid的呼叫期间设置为一次。此刻,您尚未为变量protID设置任何值。您可以通过以下方式修复您可以使用的代码:onclickSubmitdelData,beforeSubmitserializeDelData

我有点w that,您使用mtype: 'GET'选项进行删除操作。通常情况下,使用HTTP POST或HTTP DELETE。如果你真的需要mtype: 'GET'可以更换的navGrid

{ 
    mtype: 'GET', 
    url: 'ProtocolJGridServChildStages?action=protocolStageDelete&protID=' + protID 
} 

参数

{ 
    mtype: 'GET', 
    url: 'ProtocolJGridServChildStages', 
    delData: { 
     action: 'protocolStageDelete', 
     protID: function() { 
      return protID; 
     } 
    } 
} 

或可替代

{ 
    mtype: 'GET', 
    url: 'ProtocolJGridServChildStages', 
    onclickSubmit: function (options, rowid) { 
     var rowData = jQuery(this).jqGrid('getRowData', rowid); 
     return { 
      action: 'protocolStageDelete', 
      protID: ret.PROTOCOL_ID 
     }; 
    } 
} 

如果考虑使用mtype其他为GET,但需要将protID设置为URL的一部分,您可以动态修改url选项onclickSubmitbeforeSubmit回调。例如

{ 
    mtype: 'GET', 
    onclickSubmit: function (options, rowid) { 
     var rowData = jQuery(this).jqGrid('getRowData', rowid); 
     options.url = 'ProtocolJGridServChildStages?' + jQuery.param({ 
      action: 'protocolStageDelete', 
      protID: ret.PROTOCOL_ID 
     }); 
    } 
} 

您可以选择自己的方式,更好地符合您的要求。

+0

感谢您解释替代方案。 – Bhushan

+0

@Bhushan:不客气! – Oleg