JQGrid - 如何使用EditUrl

时间:2011-11-29 20:59:21

标签: javascript jqgrid

我正在尝试使用删除按钮从JQGrid中删除所选项目。 javascript代码如下所示

  <script type="text/javascript">
$(function(){ 
    $("#list").jqGrid({
        url:'<%=request.getContextPath()%>/MyGridServlet?action=fetchData',
        editurl:'<%=request.getContextPath()%>/MyGridServlet?action=deleteData',
        datatype: 'xml',
        mtype: 'POST',
        colNames:['Inv No','Date', 'Amount','Tax','Total','Notes'],
        colModel :[ 
            {name:'invid', index:'invid', width:55,editable:true, editrules:{required:true,number:true}}, 
            {name:'invdate', index:'invdate', width:90, editable:true, editrules:{required:true}}, 
            {name:'amount', index:'amount', width:80, align:'right',editable:true, editrules:{required:true,number:true}}, 
            {name:'tax', index:'tax', width:80, align:'right',editable:true, editrules:{required:true,number:true}}, 
            {name:'total', index:'total', width:80, align:'right',editable:true, editrules:{required:true,number:true}}, 
            {name:'note', index:'note', width:150, sortable:false,editable:true, editrules:{required:false}} 
        ],
        pager: '#pager',
        multiselect: true,
        loadonce: true,
        height: '100%',
        weight:'100%',
        rowNum:10,
        rowTotal: 2000,
        rowList:[10,20,30],
        sortname: 'invid',
        sortorder: 'desc',
        viewrecords: true,
        gridview: true,
        scrollable: false,
        caption: 'My first grid',
        ondblClickRow: function(rowid) {
            grid.jqGrid('editGridRow',rowid, editParam);
            return;
        }
    });                 
    jQuery("#list").jqGrid('navGrid','#pager',{add:false,del:false,edit:true});
    jQuery("#list").jqGrid('filterToolbar',{stringResult: true,searchOnEnter : false});
}); 
function deleteData(){
    alert("testing");
    var gr = jQuery("#list").jqGrid('getGridParam','selrow');
    if( gr != null ) jQuery("#list").jqGrid('delGridRow',gr,{reloadAfterSubmit:false});
    else alert("Please Select Row to delete!");
}

Servlet代码如下所示

    package com.test.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyGridServlet extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {

            if (request.getParameter("action").equals("deleteData")) {
                response.setContentType("text/xml;charset=UTF-8");
                String status = request.getParameter("status");
                String rows = request.getParameter("rows");
                String page = request.getParameter("page");
                int totalPages = 0;
                int totalCount = 15;
                if (totalCount > 0) {
                    if (totalCount % Integer.parseInt(rows) == 0) {
                        totalPages = totalCount / Integer.parseInt(rows);
                    } else {
                        totalPages = (totalCount / Integer.parseInt(rows)) + 1;
                    }
                } else {
                    totalPages = 0;
                }
                out.print("<?xml version='1.0' encoding='utf-8'?>\n");
                out.print("<rows>");
                out.print("<page>" + request.getParameter("page") + "</page>");
                out.print("<total>" + totalPages + "</total>");
                out.print("<records>" + 15 + "</records>");
                int srNo = 1;
                for (int i = 0; i < 5; i++) {
                    out.print("<row id='" + i + "'>");
                    out.print("<cell>" + request.getParameter("invid") + "</cell>");
                    out.print("<cell>Nov 15, 2011</cell>");
                    out.print("<cell>00$</cell>");
                    out.print("<cell>0$</cell>");
                    out.print("<cell>00$</cell>");
                    out.print("<cell>000</cell>");
                    out.print("</row>");
                }
                out.print("</rows>");

        } finally {
            out.close();
        }
    }
 }

现在当我运行它时,这将一直有效,直到删除提示,即当用户点击删除按钮时,点击deleteData()函数被调用,警告“测试”显示,并且还会弹出删除确认框当用户确认删除时,我可以在屏幕上看到错误parsererror Status: 'parsererror'. Error code: 200

我想要实现的是,在按钮单击时,应该调用servlet,在servlet中,我想从db中删除数据然后返回。我怎样才能做到这一点?那么Servlet应该返回什么呢?

1 个答案:

答案 0 :(得分:1)

服务器的ajax响应是什么样的(使用Chrome网络标签或Firebug查看)?实际上是否有生成请求? servlet不需要为editurl返回任何内容 - 响应确实应该为空。 jqGrid应该从你的“url”源重新加载数据以重建网格,删除后。