ExtJs + Struts2 + JSON 程序總結

                  最近一直都在看EXTJS的東西,然后自己實踐了下,界面倒是蠻漂亮的,但是一旦涉及到與服務器端進行數據互動麻煩就出來了,本來下了個例子確發現是用DWR的,覺得我既然用了STRUTS2作為MVC的框架,我覺得這個框架還是很不錯的,覺得還是把EXTJS整合到一起更好些,找了相關的資料,跟著前輩做了下例子,發現完全不是那么回事,只好自己慢慢摸索,終于把數據交互的問題解決了,所以記錄之以便查閱!
                 還是從底層開始說吧,拿最經典的例子來解說吧,訂單和客戶的關系顯然是n:1的關系,我hibernate不是用的聲明方式所以就用的xml方式做的那么相應的hbm.xml文件如下:
                 ORDER.XML 

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC 
              "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
          > 
                 
          <hibernate-mapping>
                 
          <class name="com.model.Order"  table="t_order" lazy="false">
                     
          <id name="orderId" column="OrderId">
                         
          <generator class="uuid.hex" />
                     
          </id>
                     
          <property name="name" column="Name" type="string" />
                     
          <property name="desn" column="Desn" type="string"/>
                     
          <property name="booktime" column="Booktime" type="string"/>
                     
          <property name="company" column="Company" />
                     
          <many-to-one lazy="false" name="custom" column="CustomId" class="com.model.Customer" />
                 
          </class>
             
          </hibernate-mapping>
                  CUSTOM.XML
          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC 
              "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
          > 
             
          <hibernate-mapping>
                 
          <class name="com.model.Custom"  table="t_custom" lazy="false">
                     
          <id name="customId" column="Id">
                         
          <generator class="uuid.hex" />
                     
          </id>
                     
          <property name="customName" column="Name" type="string" />
                 
          </class>
             
          </hibernate-mapping>

                  相應的MODEL的JAVA我就不寫了,只是做個例子而已,呵呵!相應的DAO SERVICE 我都不寫了,這個不是我討論的范圍,那么我想在頁面上顯示所有的信息,那么在OrderAction中我定義了一個getAllOrder的方法,然后通過struts2配置action讓EXTJS與服務器數據進行數據交互。因為EXTJS是支持JSON數據格式的,所以我用了JSON-LIB(json-lib-2.2.1-jdk15.jar)這個東東,它還依賴另外的3個包:commons-beanutils-1.7.1-20061106.jar,commons-collections-3.2.1.jar,ezmorph-1.0.4.jar。好了萬事俱備只欠東風了,我的getAllOrder方法如下:
          import java.text.DateFormat;
          import java.text.ParseException;
          import java.text.SimpleDateFormat;
          import java.util.Date;
          import java.util.List;
          import net.sf.json.*;
          //具體的那些serivce的包引入我就省略了
          public class OrderAction extends ActionSupport
          {
             
          private static final long serialVersionUID = -5092865658281004791L;
              
          private IOrderSerivce orderSerivce;
              
          private String jsonString;//這個就是中轉站了
              private List<Order> orderList;//這個是數據鏈表
              private int totalCount;//這個是extjs用來分頁
               public String getJsonString()
              
          {
                  
          return jsonString;
              }

               
          public void setJsonString(String jsonString)
              
          {
                  
          this.jsonString = jsonString;
              }

              
          public int getTotalCount()
              
          {
                  
          return totalCount;
              }

              
          public void setTotalCount(int totalCount)
              
          {
                  
          this.totalCount = totalCount;
              }

              
          public List<Air> getOrderList()
              
          {
                  
          return orderList;
              }

              
          public void setOrderList(List<Order> orderList)
              
          {
                  
          this.orderList = orderList;
              }

              
          public void setOrderSerivce(OrderSerivce orderSerivce)
              
          {
                  
          this.orderSerivce = orderSerivce;
              }

              
          public String getAllAir()
              
          {
                  orderList 
          = orderSerivce.getOrderAll();
                  
          this.setTotalCount(orderList.size());
                  
                  JSONArray array 
          = JSONArray.fromObject(orderList);
          //哈哈,就是在這里進行轉換的
                  this.jsonString = "{totalCount:"+this.getTotalCount()+",results:"+array.toString()+"}";
              
          return SUCCESS;
              }

          }
                  接下來再是什么,哦,是的,應該是STRUTS的配置了,哈哈
          <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
              "http://struts.apache.org/dtds/struts-2.0.dtd"
          >

          <struts>
                
          <package name="order" extends="struts-default">
          <action name="getAllOrder" class="orderAction" method="getAllOrder">
                      
          <result name="success" >jsondata.jsp</result>
                  
          </action>
                
          </package>
          </struts>
                  好的,看到jsondata.jsp了么,這里就是要放數據的地方,看看是什么吧!
          <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
          <%@ taglib prefix="s" uri="/struts-tags" %>
          <s:property value="jsonString" escape="false" />
                  是的,就是這么簡單的一個代碼!終于要到前臺了,該露臉了,呵呵,前臺代碼最關鍵的也就是JS代碼,那么我也就只貼JS了相信大家看過后都會自己弄清楚的!
          /*
           * Ext JS Library 2.1
           * Copyright(c) 2006-2008, Ext JS, LLC.
           * licensing@extjs.com
           * 
           * http://extjs.com/license
           
          */



          Ext.onReady(
          function(){
              Ext.BLANK_IMAGE_URL 
          = 'ext/resources/images/default/s.gif'; 
              Ext.QuickTips.init();
              
          var xg = Ext.grid;
              
          //這里就是設置解析格式的地方,一定要和你的Model一樣,要不然可是什么都得不到哦~~~~
              var rd = new Ext.data.JsonReader({
                          
          //總記錄數
                          totalProperty: 'totalCount', 
                         
          //哪兒是數據的頭,可以看action里面是怎么定義數據格式的,這里就是如何解析的           
                              root: 'results', 

                          //有那些字段呢?
                          fields:[
                                   
          {name:'orderId'},
                                                {name:'desn'},
                                   
          {name:'booktime'},
                                   
          {name:'company'},
                                   
          {name:'name'},
                                      
          //這里就是對custom對象進行映射的地方                        
                                                {name:'customId' ,mapping:'custom.customId'},
                                   {name:'customName',mapping:'custom.customName'}
                                   ]
                                               }
          );
               
          var ds = new Ext.data.Store({
                                              proxy: 
          new Ext.data.HttpProxy
          (
          {url: 'getAllOrder.action',method:'POST'}),//Url很關鍵,我就是因為沒配好這個,POST方法很重要,你可以省略,讓你看下錯誤也行的!耽誤了一大堆時間!
                                              reader:rd
                                          }
          );
               ds.load();
               
          var sm =new xg.CheckboxSelectionModel(); //CheckBox選擇列
               var cm =new xg.ColumnModel([
                                            
          new Ext.grid.RowNumberer(), //行號列 
                                            sm,
                                            
          {id:'orderId',header: "訂單號", dataIndex: 'name'},                           {header: "訂單時間",   dataIndex: 'booktime'},
                                            
          {header: "訂單公司", dataIndex: 'company'},
                                            
          {header:"客戶姓名",dataIndex:'customName'}
                                           ]);
                                           cm.defaultSortable 
          = true;
              
          ////////////////////////////////////////////////////////////////////////////////////////
              // OrderGrid 
              ////////////////////////////////////////////////////////////////////////////////////////

              
          var ordergrid = new xg.GridPanel({
                                            ds: ds,
                                            sm: sm, 
                                            cm: cm, 
                                            width:
          1000,
                                            height:
          500,
                                            frame:
          true,
                                            title:'Framed 
          with Checkbox Selection and Horizontal Scrolling',
                                            iconCls:'icon
          -grid',
                                            renderTo: document.body
                                           }
          );
              ordergrid.render();

          }
          );


                  好的,從后臺到前臺就是這么多了,大家慢慢來,一定要細心,當你的頁面在firefox華麗的運行后IE卻不露臉的話好好的找找是不是哪兒偷偷多了一個","號呢!
          歡迎到http://www.tutu6.com來看看



          posted on 2008-05-25 21:48 Cloud kensin 閱讀(15488) 評論(18)  編輯  收藏 所屬分類: Ext

          評論

          # re: ExtJs + Struts2 + JSON 程序總結 2008-06-10 11:49 徐橋

          有ExtJs + Struts2 + JSON 的原代碼
          就做一個增加、刪除、修改的案例  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結[未登錄] 2008-11-25 18:10 Y

          出不來數據  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2008-11-27 12:08 Cloud kensin

          @Y
          哪出不來數據?  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2009-02-21 19:12 破碎虛空

          管他好壞,先看看了,謝謝  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2009-06-18 14:14 tanww

          出不來數據  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2010-01-11 16:02 way

          能發我源碼嗎?新手學習!QQ:317961646  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2010-01-21 16:24 工期

          這位兄弟有點扯  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結[未登錄] 2010-06-06 15:03 Phoenix

          jsonString是怎么傳給EXTJS的呀?缺東西了吧。  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結[未登錄] 2010-06-15 22:53 dd

          能不能做下json無限級聯的實例,謝謝!
          There is a cycle in the hierarchy!  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2010-07-29 11:19 lmiky

          ext是怎么得到jsondata.jsp中的jsonString的  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2010-10-01 03:03 J

          result 到 jsondata.jsp 可以想像成在action中通過response.getWriter().print("jsondata"); 相當簡單的原理。   回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2010-10-01 03:07 J

          博主,如果能解決通過jsonplugin(<result type="json">這種方式) ,直接把List<Bean>對象輸出,請發我一下email(mmy2008@sohu.com),謝謝了  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2012-10-31 09:09 12

          只是在jsonData.jsp頁面有json返回值,但是怎么到js中的呢?能給給可以配置好的例子嗎?新手傷不起啊! 就是在訪問的時候 只有數據,頁面有不跳轉。。。。  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2012-11-02 11:04 xinta

          @12
          var ds = new Ext.data.Store({
          proxy: new Ext.data.HttpProxy
          ({url: 'getAllOrder.action',method:'POST'}),//Url很關鍵,我就是因為沒配好這個,POST方法很重要,你可以省略,讓你看下錯誤也行的!耽誤了一大堆時間! 你沒看見這個嗎?  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2012-11-04 20:06 zongalex

          老大,你要是不想給全面的 就不要上傳,要是寫上去就給個全的,jsondata.jsp只能出來一個json的數據鏈,怎么和js關聯的呢?說明白點啊!直接郁悶了,Ext就是出不來!怎么搞????????  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2012-11-19 13:34 xinta

          @zongalex
          <struts>
          <package name="order" extends="struts-default">
          <action name="getAllOrder" class="orderAction" method="getAllOrder">
          <result name="success" >jsondata.jsp</result>
          </action>
          </package>
          </struts>
          這里就是定義關聯的action啊
          var ds = new Ext.data.Store({
          proxy: new Ext.data.HttpProxy
          ({url: 'getAllOrder.action',method:'POST'})
          你看到getAllOrder.action了嗎,這里就是把json數據傳給ext了啊  回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2012-11-19 13:35 xinta

          @zongalex
          如果你還看不懂,那你就去ext官網下demo看看就知道了
            回復  更多評論   

          # re: ExtJs + Struts2 + JSON 程序總結 2012-11-19 13:36 xinta

          @zongalex
          http://www.aygfsteel.com/tokyo2006/archive/2010/04/04/317453.html
          你還不如看這個最新的  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2010年1月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導航

          統計

          常用鏈接

          留言簿(4)

          隨筆分類

          相冊

          相冊

          搜索

          最新評論

          主站蜘蛛池模板: 扶余县| 原阳县| 余姚市| 常州市| 辽宁省| 平昌县| 天门市| 昌江| 长岛县| 华池县| 安国市| 忻州市| 韩城市| 迁安市| 达日县| 临武县| 十堰市| 南乐县| 赤城县| 噶尔县| 曲阜市| 贵溪市| 城步| 惠水县| 广水市| 噶尔县| 邯郸市| 淮北市| 平安县| 册亨县| 灵丘县| 阳西县| 昭苏县| 济南市| 会理县| 类乌齐县| 大同县| 新绛县| 壶关县| 孟连| 沙湾县|