当抛出java异常时,jqgrid不能再运行了

时间:2011-06-13 08:01:03

标签: jqgrid

我不知道为什么会这样: 在调试过程中,java中抛出了一个错误,然后我就不能再运行jqgrid了。例如,我故意在java中拼写错误的sql语法,抛出一个异常然后我再次查询一次好的更改后就不能再对java程序执行了。显示在屏幕上“加载”闪过,jqgrid还没有做任何事。然后我必须重新启动tomcat再次调试。只要造成这种情况的任何异常的背景。

抱歉我的英语不好。

有没有办法改善这种情况?感谢

这是我的代码:

$.ajaxSetup({ cache: false });

var colspan = 5;
//the last modified cell's iRow and iCol
var lastedit = [];
//color array
var colorarray = new Array(['invalid_normal', 'invalid_manual','invalid_swap','invalid_business'],['valid_normal','valid_manual','valid_swap','valid_business']);

$.ajax(     
    { 
       type: "GET",        
       url: "/cbill/routenew/routequerydata.do",        
       data: "",        
       dataType: "json",        
       success: function(result){             

            var colModel = createcolModel(result.colModel); 
            var grid = jQuery("#gridTable");

            grid.jqGrid({   
            jsonReader: {   
                root: "gridModel",      // (2)   
                records: "record",      // (3)   
                repeatitems : false     // (4)   

            },  
            url: '/cbill/routenew/freshgriddata.do',
                datatype: 'json', 
            mtype: "GET",   
            colModel :colModel, 
            pager: "#gridPager",   
            rowNum: 50,   
            rowList: [50,100],                  
            height: 500,   
            loadonce:false,
            //width: 1500,
            //autowidth: true,   
            //colNames: colModelData,
            viewrecords: true,  
            prmNames: {search: 'search'},   //(1)   
            caption: "Route",
                position:"last",                
            multiselect: true,
            multiboxonly:true,
            toppager: true,
            rownumbers:true,
            shrinkToFit:true,
            hidegrid: false


           });

           grid.jqGrid('navGrid','#gridPager',{del:false,add:false,edit:false},{},{},{},
               {
                caption: "Search",   
                Find: "Go!",   
                Reset: "Reset",
                //refresh: true,
                closeAfterSearch: true,   
                multipleSearch: true,   
                groupOps: [{ op: "AND", text: "All" }],
                cloneToTop: true

               }
           ).navButtonAdd('#gridPager_left',{   
               caption:"RT Modify",    
               buttonicon:"ui-icon-newwin", 
               onClickButton: function(){    

                    $("#rowdata").jqGrid('GridUnload');
                    var ids = grid.jqGrid('getGridParam','selarrrow');
                    if (ids.length == 1) {

                    var entirerow;
                        for (var i=0, il=ids.length; i < il; i++) {
                        var entirerow = grid.jqGrid ('getRowData',ids[i]); 
                        }
                        //alert(entirerow.vc2routeno);
                        lastedit = loadComparisonRowData(entirerow, colModel);  

                    }else{
                    alert("Please select one route!");   
                    return false;                       
                    }
               },    
               position:"last"  
            }).navSeparatorAdd("#gridPager_left",{sepclass : 'ui-separator',sepcontent: ''}).navButtonAdd('#gridPager_left',{   
               caption:"State Modify",    
               buttonicon:"ui-icon-newwin", 
               onClickButton: function(){    
                    $("#rowdata").jqGrid('GridUnload');
                    var ids = grid.jqGrid('getGridParam','selarrrow');
                    if (ids.length != 0) {
                    if($("#gridPager_left").find("#vc2subroutecode").val()=='' && $("#pg_gridPager").find("#vc2subroutecode").val()==''){
                        alert("Please enter the sub-route code!");
                        return false;
                    }
                    var rowcells=new Array(); 
                    var vc2updrouteno=new Array(); 

                        for (var i=0, il=ids.length; i < il; i++) {
                        var entirerow = grid.jqGrid ('getRowData',ids[i]); 
                        rowcells.push(entirerow);
                        vc2updrouteno.push(entirerow.vc2routeno);
                        }
                        loadSelectedRowData(rowcells, vc2updrouteno, colModel);  

                    }else{
                    alert("Please select route!");   
                    return false;                       
                    }
               },    
               position:"last"  
            }); 

            $('#gridPager_left').clone(true).insertBefore('#gridTable_toppager_left') 
            $('#gridTable_toppager_left').remove(); 

            $("#resetSearch").click(function() {
                 var grid = $("#gridTable");     
                 grid.jqGrid('setGridParam',{search:false});      
                 var postData = grid.jqGrid('getGridParam','postData');     
                 $.extend(postData,{filters:""});     
                 // for singe search you should replace the line with     
                 // $.extend(postData,{searchField:"",searchString:"",searchOper:""});      
                 grid.trigger("reloadGrid",[{page:1}]); 
            });                
           //$('.ui-jqgrid-hdiv').hide();

            $("#consoleDlg").dialog({   
                autoOpen: false,       
                modal: false,     
                resizable: true,  
                height: 620,     
                width: 1200,   
                open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); },
                buttons: {  // 
                "Cancel": function() {$("#consoleDlg").dialog("close");},
                "Update" : function(){updateRouteInfo(colModel)},
                "Confirm": updateRouteFlag,
                "I Know": copyToClipboard
                }
            }); 

       },
       error : function(textStatus, errorThrown) {   
        alert("route list error: " + textStatus);   
       }         

}); 

嗨oleg,谢谢你的建议。

实际上,我的困惑是因为服务器端java导致导致客户端jqgrid无法运行的错误。我不知道是否我调用grid.jqGrid ('GridUnload', '# gridTable')来解决这个问题,因为现在我甚至不知道在哪里放这个方法,因为在服务器端抛出异常,我不知道捕获它的是什么事件然后调用此方法。当url'/ cbill / routenew / freshgriddata.do'导致错误时,我不知道grid.jqGrid ({/ * parameters */})中处理异常的位置;

当发生java错误并刷新页面时,会抛出一个客户端异常:

error: function (textStatus, errorThrown) { alert ("route list error:" + textStatus); }

'/ cbill / routenew / routequerydata.do''/ cbill / routenew / freshgriddata.do'都没有在服务器端执行。

我在这里有两个弹出窗口来修改一些数据:

"Update" : function(){updateRouteInfo(colModel)}, "Confirm": updateRouteFlag,

与我上面说的相同,每当在这些代码中抛出异常时,我都无法执行查询,并且在刷新页面时会出现上面的客户端异常。 (我在所有代码中都有几个错误函数,java异常总是会在上面的frist错误函数中导致客户端出错,我认为错误状态保存到jqgrid)

当然,我尝试改进服务器端代码以避免错误,但无法避免所有错误。如果后台发生异常,则jqgrid程序模块将不会运行。

我不知道是否要表达我的意思。我希望你能得到更多帮助。感谢

1 个答案:

答案 0 :(得分:0)

永久“加载”消息通常意味着从服务器加载网格数据,但由于某些原因,它在JavaScript代码中的某处是异常。我建议您使用一些调试器(例如Internet Explorer的Developer Tools)来本地化错误/异常的位置。

一次尝试加载数据的问题可能是因为您一次使用上面的代码。问题是如下。 jqGrid在您使用的<table id="gridTable"></table>上构造一些div和许多其他HTML元素。因此,您应该每个网格只调用grid.jqGrid({/*parameters*/}); 一次。如果您确实需要重新加载列定义,然后重新加载页面上的网格,则应调用GridUnloadgrid.jqGrid('GridUnload','#gridTable'),然后重新分配grid变量:grid = jQuery("#gridTable");。请参阅the answer相应的演示示例。

还有一句话。我不建议您使用$('#gridPager_left').clone(true)。相反,您可以使用navGrid的{​​{3}}参数:

grid.jqGrid('navGrid','#gridPager',{cloneToTop:true, ...}

要向标准底部寻呼机添加按钮,您应该像"#gridPager"'#gridTable_toppager'而不是"#gridPager_left"'#gridTable_toppager_left'一样。此外,你不应该删除任何jqGrid元素,只要你不需要它隐藏它。例如,代码$('#gridTable_toppager_left').remove();似乎很危险。