extjsデータのフロントバックグラウンドデータインタラクション

7891 ワード

前編では,dwrを用いてEXTJSコードでバックグラウンドを直接呼び出すJavaメソッドについて述べた.この記事では,Javaメソッドを呼び出すことなく,戻り値がない場合にJavaの戻り情報を取得する.使用するExtjsのsubmitプロファイル---successとfailureを配置する.
        Ext.form.Action.Submitのコンフィギュレーションオプションsuccess、failureは、戻りjsonのsuccess属性に基づいて判断され、successがtrueの場合success、falseの場合failure、jsonにsuccess属性がなければfailureなので、操作が成功したかどうかを示すにはsuccess属性を返さなければならない.
      
        この方法は、jsインタフェースでJavaメソッドを呼び出して各種の検証と値を取得するほか、フォームのコミットも実行することが多い.フォームをコミットしてもバックグラウンドメソッドは呼び出されず、実行結果を知る実行情報を表示することができる.
EXTJSページ部分コード:
[javascript] view plain copy print ?
  • //送信ボタン 
  • var submitButton = new Ext.Button( 
  •                          { 
  •                              text:'コミット', 
  •                              iconCls: 'c_page_white_get', 
  •                              scope: this, 
  •                              width: 75, 
  •                              height: 24, 
  •                              handler: function() { 
  •                             //コミットメソッドの実行 
  •                              this.submitData ( ); 
  •                           } 
  • }); 
  •  
  •  
  • //提出時に実行する方法 
  • submitData : function( ) { 
  •                      //フォームのコミット 
  •                       this.uploadForm.getForm().submit({ 
  •                            waitMsg:'提出中ですので少々お待ちください...'  
  •                           //フォーム情報をサーブレットに送信 
  •                            url: ctx + '/testServlet, method: 'POST', 
  •  
  •                           //ポイント:successブロック 
  •                            success: function(form, action) { 
  •                               //ショーメッセージは楽屋から届いています 
  •                                Ext.MessageBox.alert('ヒント',action.result.showmessage);  
  •                            },  
  •                           //failureブロック 
  •                            failure: function(form, action) {  
  •                                Ext.Msg.alert('ヒント',action.result.msg,function(){  
  •                                   window.close();  
  •                                });  
  •                            },  
  •                            scope: this });  
  • }  
  • //    
    var submitButton = new Ext.Button(
                             {
                                 text: '  ',
                                 iconCls: 'c_page_white_get',
                                 scope: this,
                                 width: 75,
                                 height: 24,
                                 handler: function() {
                                 //      
                                 this.submitData ( );
                              }
    });
    
    
    //        
    submitData : function( ) {
                          //  form   
                          this.uploadForm.getForm().submit({
                               waitMsg: '       ...', 
                               //        Servlet 
                               url: ctx + '/testServlet, method: 'POST',
    
                               //  :success  
                               success: function(form, action) {
                                   //showmessage       
                                   Ext.MessageBox.alert('  ', action.result.showmessage); 
                               }, 
                               //failure  
                               failure: function(form, action) { 
                                   Ext.Msg.alert('  ', action.result.msg, function() { 
                                      window.close(); 
                                   }); 
                               }, 
                               scope: this }); 
    }

    サーブレットコード:
    [java] view plain copy print ?
  • public class testServlet extends  HttpServlet { 
  •    
  •          publicvoid doPost(HttpServletRequest request, HttpServletResponse response) 
  •                             throwsServletException, IOException { 
  •                    try{ 
  •                            //アクションなどのバックグラウンドメソッドを呼び出す 
  •                            //インタフェースの内容に戻る戻り値があります 
  •                             String showMessage = new TestAction().test(); 
  •                            //responseフォーマットの設定 
  •                             response.setCharacterEncoding("UTF-8"); 
  •                             response.setContentType("text/html"); 
  •                             response.getWriter().write( 
  •                                  "{'success':true,'showmessage':'"+ showMessage +"'}"); 
  •   
  •                    }catch (Exception e) { 
  •                            //失敗したときに返されるメッセージ 
  •                             response.setCharacterEncoding("UTF-8"); 
  •                             response.setContentType("text/html"); 
  •                             response.getWriter().write( 
  •                                                「{'success':false,'showmessage':'異常が発生し、操作に失敗しました'}」). 
  •                             response.setStatus(500); 
  •                    } 
  •   
  •          } 
  •   
  •          publicvoid doGet(HttpServletRequest request, HttpServletResponse response) 
  •                             throwsServletException, IOException { 
  •                    doPost(request,response); 
  •          } 
  • public class testServlet extends  HttpServlet {
      
             publicvoid doPost(HttpServletRequest request, HttpServletResponse response)
                                throwsServletException, IOException {
                       try{
                                //  action     
                                //     ,        
                                String showMessage = new TestAction().test();
                                //  response  
                                response.setCharacterEncoding("UTF-8");
                                response.setContentType("text/html");
                                response.getWriter().write(
                                     "{'success':true,'showmessage':'"+ showMessage +"'}");
     
                       }catch (Exception e) {
                                //        
                                response.setCharacterEncoding("UTF-8");
                                response.setContentType("text/html");
                                response.getWriter().write(
                                                   "{'success':false,'showmessage':'    ,    '}");
                                response.setStatus(500);
                       }
     
             }
     
             publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
                                throwsServletException, IOException {
                       doPost(request,response);
             }
    }

               例から分かるように、successとfailureの方法は、json文字列を用いる、戻り値をresponseを介してjsインタフェースに持ち帰る文字列のフォーマットを用いる.
              Extのコンフィギュレーションオプションsuccess、failureはresponseのstatus属性、すなわちステータスコードに基づいて決定され、200はsuccess、404または500などはfailureである.
              EXTJSとJavaバックグラウンドのインタラクションは便利で、ここで紹介する2つの方法はそれぞれ異なる場合に用いられ、必要に応じて選択する.