<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(15483) 評論(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://m.tkk7.com/tokyo2006/archive/2010/04/04/317453.html
    你還不如看這個最新的  回復  更多評論   


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


    網站導航:
     
    <2012年11月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    導航

    統計

    常用鏈接

    留言簿(4)

    隨筆分類

    相冊

    相冊

    搜索

    最新評論

    主站蜘蛛池模板: 国产做床爱无遮挡免费视频| 亚洲精品高清久久| 中文字幕手机在线免费看电影| 亚洲欧洲无码AV电影在线观看| 嘿嘿嘿视频免费网站在线观看| 亚洲av日韩aⅴ无码色老头| 国产亚洲精久久久久久无码77777 国产亚洲精品成人AA片新蒲金 | 性xxxxx免费视频播放| 国产精品亚洲а∨无码播放不卡| 国产综合成人亚洲区| 亚洲AV永久无码区成人网站| 久久亚洲免费视频| 亚洲老熟女五十路老熟女bbw| 国产综合亚洲专区在线| 亚欧免费视频一区二区三区| 美女被羞羞网站免费下载| 亚洲处破女AV日韩精品| 日本免费人成黄页网观看视频| 中文在线免费观看| 亚洲高清一区二区三区电影 | 亚洲精品乱码久久久久久下载 | 最近中文字幕mv免费高清视频8| 国产亚洲精品美女久久久久 | 亚洲爆乳AAA无码专区| 亚洲成a人片77777kkkk| 国产成人免费网站在线观看 | 亚洲精品无码AV中文字幕电影网站| 99精品视频在线观看免费播放 | 免费观看的a级毛片的网站| 日本不卡免费新一区二区三区| 亚洲AV综合色区无码一二三区| 久久久久亚洲AV无码专区体验| 免费v片在线观看品善网| 99国产精品免费视频观看| 国产成人高清精品免费观看| 亚洲乱亚洲乱妇24p| 337p日本欧洲亚洲大胆精品555588 | 亚洲&#228;v永久无码精品天堂久久 | 亚洲AV无码久久寂寞少妇| 丝袜熟女国偷自产中文字幕亚洲| 免费看a级黄色片|