когда возникает исключение Java, jqgrid больше не может работать - PullRequest
0 голосов
/ 13 июня 2011

Я не знаю, почему всегда есть это: Во время процесса отладки в java выдается ошибка, и я больше не могу запускать jqgrid. Например, я намеренно неправильно написал синтаксис sql в java, было сгенерировано исключение, а затем я снова запросил, после того как хорошее изменение больше не может быть выполнено в 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);   
       }         

}); 

Привет, Олег, спасибо за совет.

На самом деле, я путаюсь с тем, что на стороне сервера Java вызывает ошибку, которая привела к тому, что клиент jqgrid не запускается. Я не знаю, если я вызову grid.jqGrid ('GridUnload', '# gridTable'), чтобы решить эту проблему, потому что теперь я даже не знаю, где поместить этот метод, потому что на стороне сервера возникает исключение, я не знаю, какие события захватить его, а затем вызвать Этот метод. Я не знаю, где обрабатываются исключения в grid.jqGrid ({/ * parameters */}), когда url '/ cbill / routenew / freshgriddata.do' привел к ошибке;

Когда возникает ошибка 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 голосов
/ 13 июня 2011

Постоянное сообщение «загрузка» обычно означает, что загрузка данных сетки с сервера была начата, но по некоторым причинам это было исключением где-то в коде JavaScript.Я рекомендую вам использовать какой-нибудь отладчик (например, Developer Tools of the Internet Explorer) для локализации места ошибки / исключения.

Проблема с одной попыткой загрузки данных может быть из-за того, что вы используете приведенный выше кодбольше как один раз.Проблема в следующем.jqGrid создает некоторые элементы div и многие другие элементы HTML поверх <table id="gridTable"></table>, который вы используете.Поэтому вы должны вызывать grid.jqGrid({/*parameters*/}); только один раз за сетку.Если вам нужно перезагрузить определение столбца, а затем сетку на странице, вы должны вызвать GridUnload : grid.jqGrid('GridUnload','#gridTable'), а затем переназначить grid variable: grid = jQuery("#gridTable");.См. ответ соответствующий демонстрационный пример.

Еще одно замечание.Я не рекомендую вам использовать $('#gridPager_left').clone(true).Вместо этого вы можете использовать cloneToTop: true параметр navGrid:

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

Чтобы добавить кнопки в стандартный нижний пейджер, вы должны "#gridPager" или '#gridTable_toppager', а не "#gridPager_left" и '#gridTable_toppager_left', как и вы.Более того, вы не должны удалять какой-либо элемент jqGrid, просто скройте его, если он вам не нужен.Например, код $('#gridTable_toppager_left').remove(); кажется мне опасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...