国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
一份完整的Spring Hibernate DWR extJs的生成樹(shù)及下拉comBobo...
在各種論壇上看了很久,沒(méi)見(jiàn)到完整extJs樹(shù)的生成代碼。研究了很久終于實(shí)現(xiàn)了Spring+Hibernate+DWR+extJs的生成樹(shù)及下拉comBoboxTree。
     不敢獨(dú)享收獲 ,借javaeye這一平臺(tái)將我的成果和大家分享。不足和錯(cuò)誤之處敬請(qǐng)批評(píng)指正。有疑問(wèn)歡迎聯(lián)系我。qq:446702119 msn: wh_aq@hotmail.com
     

     廢話少說(shuō),還是從生成樹(shù)開(kāi)始吧。
     一、樹(shù)的對(duì)象模型。
        
Java代碼
  1. package com.ssgly.model;   
  2.   
  3. import java.util.List;   
  4. import java.util.Set;   
  5.   
  6.     
  7. public class Region {   
  8.     
  9.     private Long id;   
  10.     private String name;   
  11.     private String code;   
  12.     private Region parent;   
  13.     private Set<Region> children = new java.util.HashSet<Region>();   
  14.   
  15.     public Region() {}   
  16.   
  17.     public Region(String name, String code, Region parent) {   
  18.         this.name = name;   
  19.         this.code = code;   
  20.         if(parent!=null) parent.addChild(this);        
  21.     }   
  22.   
  23.     public Long getId() {   
  24.         return id;   
  25.     }   
  26.   
  27.     public void setId(Long id) {   
  28.         this.id = id;   
  29.     }   
  30.   
  31.     public String getName() {   
  32.         return name;   
  33.     }   
  34.   
  35.     public void setName(String name) {   
  36.         this.name = name;   
  37.     }   
  38.   
  39.     public String getCode() {   
  40.         return code;   
  41.     }   
  42.   
  43.     public void setCode(String code) {   
  44.         this.code = code;   
  45.     }   
  46.   
  47.     public Region getParent() {   
  48.         return parent;   
  49.     }   
  50.   
  51.     public void setParent(Region parent) {   
  52.         this.parent = parent;   
  53.     }   
  54.   
  55.     public Set<Region> getChildren() {   
  56.         return children;   
  57.     }   
  58.   
  59.     public void setChildren(Set<Region> children) {   
  60.         this.children = children;   
  61.     }   
  62.         
  63.   
  64. }   
  65.            

二、樹(shù)結(jié)構(gòu)的數(shù)據(jù)庫(kù)(mySql)DDL
Java代碼
  1. CREATE TABLE `region` (   
  2.   `id` bigint(20) NOT NULL,   
  3.   `name` varchar(100default NULL,   
  4.   `code` varchar(100default NULL,   
  5.   `parent_id` bigint(20default NULL,   
  6.   PRIMARY KEY  (`id`),   
  7.   KEY `FK91AD1314568C1D72` (`parent_id`),   
  8.   CONSTRAINT `FK91AD1314568C1D72` FOREIGN KEY (`parent_id`) REFERENCES `region` (`id`)   
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

三、對(duì)象模型到數(shù)據(jù)庫(kù)的Hibernate映射關(guān)系
Java代碼
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   
  4. <hibernate-mapping>   
  5.         
  6.     <class name="com.ssgly.model.Region" table="region"  >   
  7.         <id       name="id"   column="id"  type="java.lang.Long">   
  8.              <generator class="assigned" />   
  9.         </id>           
  10.         <property name="code" column="code" type="java.lang.String" />   
  11.         <property name="name" column="name"  type="java.lang.String"  />   
  12.         <many-to-one name="parent"   column="parent_id"    cascade="save-update"  />   
  13.         <set name="children"   inverse="true" cascade="save-update"  lazy="false">   
  14.              <key column="parent_id"  ></key>   
  15.              <one-to-many class="com.ssgly.model.Region"></one-to-many>   
  16.         </set>   
  17.     </class>   
  18. </hibernate-mapping>  

四、用Spring框架來(lái)管理和支撐持久層、業(yè)務(wù)邏輯層和展示層
【一】持久層采用了DAO模式 。具體設(shè)計(jì)了一個(gè)類型安全的泛型DAO。由于這不是我要講的重點(diǎn)部分,感興趣的朋友可以
查閱有關(guān)文檔。要生成一個(gè)樹(shù),必須要從后臺(tái)數(shù)據(jù)庫(kù)中按一定類型(我用了適配器模式)取出java對(duì)象--TreeNode 對(duì)象  。及要實(shí)現(xiàn)方法 public List<Region> listRegionByParent(Region parent)。
TreeNode類型為:
Java代碼
  1. package com.ssgly.model;   
  2.   
  3.   
  4.   
  5. ublic  class TreeNode {   
  6. private String id;   
  7. private String Text;   
  8. private boolean leaf;   
  9. private String cls="";    
  10.   
  11. private Region region;   
  12.   
  13. public TreeNode(Region region)   
  14. {   
  15.         this.region=region;   
  16. }      
  17.   
  18. public String getId() {        
  19.         return region.getId().toString();   
  20. }   
  21.     
  22. public boolean getLeaf() {         
  23.         return region.getChildren().size()<1;   
  24. }          
  25.   
  26. public String getText() {              
  27.         return region.getName();   
  28. }   
  29.   
  30. public String getCls() {   
  31.     return region.getChildren().size()<1?"file":"folder";   
  32. }   
  33.   
  34.     
  35.   
  36.     


具體生成樹(shù)的泛型DAO實(shí)現(xiàn)是:
Java代碼
  1. package com.ssgly.dao;   
  2.   
  3.     
  4.   
  5. import java.io.IOException;   
  6. import java.sql.SQLException;   
  7. import java.text.SimpleDateFormat;   
  8. import java.util.List;   
  9.   
  10. import com.ssgly.model.Region;   
  11.   
  12. import com.ssgly.model.Page;   
  13.   
  14.   
  15. public class RegionDAOImpl extends GenericHibernateDAOCrud<Region> implements IRegionDAO {   
  16.        
  17.     public RegionDAOImpl(){   
  18.            
  19.         super(Region.class);   
  20.     }   
  21.   
  22.     public void deleteRegion(Region region) {   
  23.         hibernateTemplate.delete(region);   
  24.            
  25.     }   
  26.   
  27.     public void deleteRegion(Long id) {   
  28.         hibernateTemplate.delete(hibernateTemplate.get(Region.class, id));   
  29.            
  30.     }   
  31.   
  32.     public Region getRegion(Long id) {   
  33.             
  34.         return (Region)hibernateTemplate.get(Region.class, id);   
  35.     }   
  36.   
  37.     public Long saveRegion(Region region) {   
  38.         hibernateTemplate.save(region);   
  39.         return region.getId();   
  40.     }   
  41.   
  42.     public void updateRegion(Region region) {   
  43.            
  44.         hibernateTemplate.saveOrUpdate(region);   
  45.     }   
  46.        
  47.     /**  
  48.      * 查詢父節(jié)點(diǎn)的所有子節(jié)點(diǎn)  
  49.      * @param parent   父節(jié)點(diǎn)  
  50.      * @return  該父節(jié)點(diǎn)對(duì)應(yīng)的子節(jié)點(diǎn)  
  51.      *   
  52.      *   
  53.      **/  
  54.     public List<Region> listRegionByParent(Region parent) {   
  55.          if (parent==null){   
  56.              return (List<Region>)hibernateTemplate.find("from Region as r where r.parent is null");    
  57.          }else{   
  58.              return (List<Region>)queryForLists("from Region as r where r.parent=?"  
  59.                          ,new Object[]{parent});   
  60.                 
  61.          }   
  62.            
  63.     }   
  64.   
  65.        
  66. }  


從上面java代碼中可以看到:DWR需要解析的是 List<Region> 類型的對(duì)象。
【二】業(yè)務(wù)邏輯層主要采用一個(gè)實(shí)現(xiàn)類BusinessServiceImp 。將所有的業(yè)務(wù)邏輯放在一個(gè)類中,一是便于spring中bean好管理,二是方便權(quán)限控制。BusinessServiceImp 中的一個(gè)很重要的屬性是: private IRegionDAO regionDAO; regionDAO的生命周期依賴于spring容器,在spring中管理和維護(hù)。邏輯層的代碼如下:
Java代碼
  1. package com.ssgly.business.impl;   
  2.   
  3. import java.io.IOException;   
  4. import java.io.Serializable;   
  5. import java.sql.SQLException;   
  6. import java.util.ArrayList;   
  7. import java.util.Iterator;   
  8. import java.util.List;   
  9.   
  10. import com.ssgly.model.*;   
  11. import com.ssgly.util.Hzxs;   
  12.   
  13. import com.ssgly.business.BusinessService;   
  14. import com.ssgly.dao.*;   
  15.   
  16.   
  17. public class BusinessServiceImpl implements BusinessService {   
  18.         
  19.         private IRegionDAO regionDAO;   
  20.            
  21.         public void setRegionDAO(IRegionDAO regionDAO) {   
  22.             this.regionDAO = regionDAO;   
  23.         }   
  24.         
  25.         public List<TreeNode> getAllChildren(Long parentId) throws IOException,   
  26.                 SQLException {   
  27.             List<Region> listRegion=regionDAO.listRegionByParent(regionDAO.getRegion(parentId));   
  28.             List<TreeNode> listTreeNode=new ArrayList<TreeNode>();   
  29.             for(Region region:listRegion){   
  30.                 System.out.println(">>"+region.getName());   
  31.                 listTreeNode.add(new TreeNode(region));   
  32.             }   
  33.             //System.out.println("List<TreeNode> getAllChildren 方法已執(zhí)行!");   
  34.             return listTreeNode;   
  35.         }   
  36.             
  37.            
  38. }  

【三】Spring容器的配置主要是通過(guò)xml方式體現(xiàn)。
一是:web.xml的配置如下:
Java代碼
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
  3.     "http://java.sun.com/dtd/web-app_2_3.dtd">   
  4. <web-app>   
  5.    <context-param>   
  6.         <param-name>contextConfigLocation</param-name>   
  7.         <param-value>   
  8.             /WEB-INF/dispatcherServlet-servlet.xml,   
  9.             /WEB-INF/model-config.xml               
  10.         </param-value>   
  11.     </context-param>   
  12.   <!-- log4j config -->   
  13.     <context-param>   
  14.         <param-name>log4jConfigLocation</param-name>   
  15.         <param-value>/WEB-INF/log4j.properties</param-value>   
  16.     </context-param>      
  17.  <!--========================================================================   
  18.         Filters   
  19.     =========================================================================-->   
  20.   
  21.     <filter>   
  22.         <filter-name>encodingFilter</filter-name>   
  23.         <filter-class>com.ssgly.web.filter.EncodingFilter</filter-class>   
  24.         <init-param>   
  25.             <param-name>encoding</param-name>   
  26.             <param-value>utf-8</param-value>   
  27.         </init-param>   
  28.     </filter>   
  29.     <filter-mapping>   
  30.         <filter-name>encodingFilter</filter-name>   
  31.         <url-pattern>*</url-pattern>   
  32.     </filter-mapping>       
  33.  <!--========================================================================   
  34.         Listeners   
  35.     =========================================================================-->   
  36.   
  37.     <listener>   
  38.         <listener-class>   
  39.             org.springframework.web.util.Log4jConfigListener   
  40.         </listener-class>   
  41.     </listener>   
  42.     <listener>   
  43.         <listener-class>   
  44.             org.springframework.web.context.ContextLoaderListener   
  45.         </listener-class>   
  46.     </listener>   
  47.       
  48.   <!--========================================================================   
  49.         Servlets   
  50.     =========================================================================-->   
  51.     <servlet>   
  52.         <servlet-name>dispatcherServlet</servlet-name>   
  53.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   
  54.         <load-on-startup>0</load-on-startup>   
  55.     </servlet>   
  56.   
  57.     <servlet-mapping>   
  58.         <servlet-name>dispatcherServlet</servlet-name>   
  59.         <url-pattern>*.do</url-pattern>   
  60.     </servlet-mapping>   
  61. <!--========================================================================   
  62.         DWR 配置   
  63.     =========================================================================-->   
  64.     <!--配置DWR攔截器-->      
  65.      <servlet>      
  66.           <servlet-name>dwr-invoker</servlet-name>      
  67.           <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>      
  68.           <init-param>      
  69.            <param-name>debug</param-name>      
  70.            <param-value>true</param-value>      
  71.           </init-param>   
  72.           <init-param>   
  73.             <param-name>classes</param-name>   
  74.             <param-value>java.lang.Object</param-value>   
  75.           </init-param>   
  76.           <load-on-startup>100</load-on-startup>   
  77.      </servlet>      
  78.      <servlet-mapping>      
  79.       <servlet-name>dwr-invoker</servlet-name>      
  80.       <url-pattern>/dwr/*</url-pattern>      
  81.      </servlet-mapping>   
  82.  <!--========================================================================   
  83.         Session   
  84.     =========================================================================-->   
  85.   
  86.     <session-config>   
  87.         <session-timeout>30</session-timeout>   
  88.     </session-config>   
  89.   
  90.         
  91.     
  92.     
  93. </web-app>  

二是:bean生成的配置。model-config.xml
Java代碼
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"    
  3.  "http://www.springframework.org/dtd/spring-beans.dtd">    
  4.  <beans>   
  5.         
  6.      <bean id="propertyConfigurer"  
  7.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">   
  8.         <property name="locations">   
  9.             <list>   
  10.                 <value>/WEB-INF/jdbc.properties</value>                   
  11.             </list>   
  12.         </property>   
  13.     </bean>   
  14.         
  15.    <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">   
  16.         <property name="driverClassName" value="${jdbc.driver}" />   
  17.         <property name="url" value="${jdbc.url}" />   
  18.         <property name="username" value="${jdbc.username}" />   
  19.         <property name="password" value="${jdbc.password}" />   
  20.     </bean>       
  21.   
  22.   
  23.     <bean id="sessionFactory"  
  24.                  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"  destroy-method="close">   
  25.             <property name="dataSource">   
  26.                  <ref local="myDataSource" />   
  27.             </property>   
  28.             <property name="mappingResources">   
  29.                 <list>   
  30.                    <value> com/ssgly/model/Region.hbm.xml</value>                   
  31.                 </list>   
  32.             </property>   
  33.             <property name="hibernateProperties">   
  34.               <props>   
  35.                 <prop key="connection.characterEncoding">utf-8</prop>   
  36.                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>   
  37.                 <prop key="hibernate.jdbc.batch_size">50</prop>    
  38.                 <prop key="hibernate.show_sql">true</prop>   
  39.                 <prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>   
  40.                 </props>   
  41.             </property>   
  42.         </bean>   
  43.      
  44.     <bean id="transactionManager"    
  45.           class="org.springframework.orm.hibernate3.HibernateTransactionManager">    
  46.         <property name="sessionFactory">    
  47.             <ref bean="sessionFactory"/>    
  48.         </property>    
  49.     </bean>   
  50.        
  51.     <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">   
  52.          <property name="sessionFactory"> <ref bean="sessionFactory"/> </property>   
  53.     </bean>   
  54.        
  55.     
  56.      <bean id="regionDao"  class="com.ssgly.dao.RegionDAOImpl">   
  57.         <property name="hibernateTemplate">    
  58.             <ref bean="hibernateTemplate"/>   
  59.         </property>               
  60.      </bean>                                      
  61.    <bean id="businessService" class="com.ssgly.business.impl.BusinessServiceImpl">   
  62.        <property name="regionDAO"><ref  bean="regionDao" /></property>   
  63.           
  64.    </bean>   
  65.       
  66.    <bean id="todoSsglyService"  class="com.ssgly.ext.ToDoImpl">   
  67.         <property name="businessServiceImpl">    
  68.             <ref bean="businessService"/>   
  69.         </property>               
  70.    </bean>   
  71.       
  72.       
  73. </beans>  

三是:servlet配置 dispatcherServlet-servlet.xml
Java代碼
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"    
  3.  "http://www.springframework.org/dtd/spring-beans.dtd">    
  4.   
  5. <beans>   
  6.     <!--============================================================================   
  7.         URL Mapping configuration   
  8.     =============================================================================-->   
  9.   
  10.     <bean id="beanNameUrlMapping"  
  11.         class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">   
  12.         <property name="alwaysUseFullPath" value="true" />   
  13.     </bean>   
  14.    <!--============================================================================   
  15.         Velocity configuration   
  16.     =============================================================================-->   
  17.   
  18.     <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">   
  19.         <property name="contentType"><value>text/html;charset=GBK</value></property>   
  20.     </bean>   
  21.   
  22.     <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">   
  23.         <property name="configLocation" value="/WEB-INF/velocity.properties" />   
  24.         <property name="resourceLoaderPath" value="/" />   
  25.     </bean>   
  26.     
  27.     <bean id="treeRegionServlet"  name="/treeRegionServlet.do" class="com.ssgly.web.TreeRegionServlet">   
  28.         <property name="businessService">   
  29.             <ref bean="businessService"/>   
  30.         </property>   
  31.     </bean>   
  32. </beans>  

    有了這些xml的配置。Spring能將三層很好地組合起來(lái)。以上是java部分。還沒(méi)有講到extJs。extJs可以接受asp、php、java等服務(wù)器端生成的json格式的對(duì)象。就java來(lái)說(shuō) ,extJs能接受三種方式的json對(duì)象,一是servlet中拼接json對(duì)象;其次是引用json lib 包;三是DWR方式,繞過(guò)Controller(就Spring來(lái)說(shuō))或servlet,在javascript中 直接調(diào)用java業(yè)務(wù)邏輯層中的方法(通過(guò)DWR引擎),利用dwr代理或者javascript 回調(diào)函數(shù)返回json對(duì)象并在頁(yè)面展示。
    本人采用了第三種DWR方式實(shí)現(xiàn)ExtJs生成樹(shù)。要使用dwr 就的要在以上幾個(gè)配置文件中配置DWR(已配)。具體的下次再說(shuō)吧。
    今天就寫(xiě)到這里吧。不知寫(xiě)的怎么樣?有朋友關(guān)注這一塊?若支持,請(qǐng)鼓勵(lì)一下;寫(xiě)的不好、不對(duì)或不懂的地方,請(qǐng)拍磚。(續(xù))

    抱歉啊,這幾天忙著考駕照,把這事給耽擱啊。書(shū)接上回吧。
【四】基于Spring方式的DWR配置說(shuō)明。
一、首先在WEB.xml中配置dwr攔截器 代碼如下(節(jié)選):
Java代碼
  1. <!--配置DWR攔截器-->      
  2.      <servlet>      
  3.              <servlet-name>dwr-invoker</servlet-name>      
  4.       <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>      
  5.           <init-param>      
  6.            <param-name>debug</param-name>      
  7.            <param-value>false</param-value>      
  8.           </init-param>   
  9.           <init-param>   
  10.             <param-name>classes</param-name>   
  11.             <param-value>java.lang.Object</param-value>   
  12.           </init-param>   
  13.           <load-on-startup>100</load-on-startup>   
  14.      </servlet>      
  15.      <servlet-mapping>      
  16.       <servlet-name>dwr-invoker</servlet-name>      
  17.       <url-pattern>/dwr/*</url-pattern>      
  18.      </servlet-mapping>  

二、dwr.xml的配置。這里將Spring管理的bean映射成javascipt操作的對(duì)象。更直觀的說(shuō)法就是使得頁(yè)面中javascript能直接使用java中對(duì)象的方法。代碼如下:
Java代碼
  1.  <?xml version="1.0" encoding="utf-8"?>   
  2. <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"  
  3.     "http://getahead.ltd.uk/dwr/dwr20.dtd">   
  4.   
  5. <dwr>   
  6.     <allow>   
  7.         <convert converter="bean"  match="com.ssgly.model.*"/>   
  8.         <convert converter="map" match="org.directwebremoting.convert.MapConverter"/>    
  9.         <create creator="spring" javascript="treeBusinessService">   
  10.           <param name="beanName" value="businessService"/>   
  11.           <include method="getAllChildren" />   
  12.         </create>   
  13.     </allow>   
  14.      
  15. </dwr>  


    從上面的代碼可以看出,javascript使用treeBusinessService.getAllChildren 方法就能夠直接取出 Spring維持的業(yè)務(wù)邏輯層定義的bean----- businessService。從而完成了DWR的功能。這里當(dāng)然存在安全問(wèn)題,在這里暫時(shí)沒(méi)有討論,關(guān)于如何在DWR中進(jìn)行安全控制,大家可以參考有關(guān)文檔。本文暫不考慮。
【五】ext和服務(wù)器端交互的機(jī)制和具體實(shí)現(xiàn)
    一般說(shuō)來(lái),按照上面DWR的配置,就已經(jīng)實(shí)現(xiàn)了在頁(yè)面中使用java的方法。但java方法執(zhí)行后生成的List 傳回到頁(yè)面還需要靠回調(diào)函數(shù)實(shí)現(xiàn)。例如下面代碼就是包含了回調(diào)函數(shù)的測(cè)試頁(yè)。
Java代碼
  1. <html>   
  2. <head>         
  3.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">      
  4. <title>ExtJS-樹(shù)示例</title>   
  5. <link rel="stylesheet" type="text/css" href="ext2/resources/css/ext-all.css" />   
  6. <script type="text/javascript" src="ext2/adapter/ext/ext-base.js"></script>   
  7. <script type="text/javascript" src="ext2/ext-all.js"></script>   
  8.     
  9. <PRE class=java name="code"><script type="text/javascript" src="dwr/interface/treeBusinessService.js "></script>   
  10. <script type="text/javascript" src="dwr/engine.js "></script>   
  11. <script type="text/javascript" src="dwr/util.js "></script></PRE>    
  12. <BR><script type="text/javascript">   
  13. <BR>           
  14. <BR>    treeBusinessService.getAllChildren(1,function(ret){   
  15. <BR>                                     alert("一共有"+ret.length+"個(gè)子節(jié)點(diǎn)");   
  16. <BR>                                   });   
  17. <BR>   
  18. <BR></script>   
  19. <BR></head>   
  20. <BR>       
  21. <BR><body>   
  22. <BR><div id="tree-div"></div>        
  23. <BR></body>   
  24. <BR></html>   
  25. <BR>  


現(xiàn)在分析一下上面頁(yè)面主要代碼:

Java代碼
  1. <script type="text/javascript" src="dwr/interface/treeBusinessService.js "></script>   
  2.    

這句中的treeBusinessService就是DWR.xml中定義的
Java代碼
  1. <create creator="spring" javascript="treeBusinessService">  


下面兩句是使用DWR所必需的,原樣加上即可。
Java代碼
  1. <script type="text/javascript" src="dwr/engine.js "></script>   
  2. <script type="text/javascript" src="dwr/util.js "></script>  

有了上面的這些DWR配置,就能夠以DWR的方式使用java的方法啦:
Java代碼
  1. <script type="text/javascript">   
  2.            
  3.     treeBusinessService.getAllChildren(1,function(ret){   
  4.                                      alert("一共有"+ret.length+"個(gè)子節(jié)點(diǎn)");   
  5.                                    });   
  6.   
  7. </script>  

   function(ret)就是回調(diào)函數(shù)。因?yàn)閠reeBusinessService.getAllChildren執(zhí)行的結(jié)果是List類型,DWR解析List到頁(yè)面應(yīng)該是javascript的對(duì)象數(shù)組,所以ret應(yīng)該是個(gè)數(shù)組,ret.length是這個(gè)數(shù)組的長(zhǎng)度。

   上面的例子只不過(guò)是原理性的介紹,幫助我們理解javascript如何和后臺(tái)進(jìn)行的交互。真正要實(shí)現(xiàn)DWRTree 還需要專門(mén)的DWRTreeLoader代理。下面這段代碼很是重要,參考了ext官方bbs上的代碼,并做了修改。先提供如下:
Java代碼
  1. Ext.tree.DWRTreeLoader = function(config) {   
  2.   Ext.tree.DWRTreeLoader.superclass.constructor.call(this, config);   
  3. };   
  4.   
  5. Ext.extend(Ext.tree.DWRTreeLoader, Ext.tree.TreeLoader, {   
  6.    args:[],   
  7.    requestData : function(node, callback) {   
  8.     if (this.fireEvent("beforeload"this, node, callback) !== false) {   
  9.   
  10.         
  11.       var callParams = new Array();   
  12.       var success = this.handleResponse.createDelegate(this, [node, callback], 1);   
  13.       var error = this.handleFailure.createDelegate(this, [node, callback], 1);   
  14.       callParams.push(node.id);   
  15.       callParams.push({callback:success, errorHandler:error});   
  16.   
  17.       //todo: do we need to set this to something else?   
  18.       this.transId=true;   
  19.       this.dataUrl.apply(this, callParams);   
  20.     } else {   
  21.       // if the load is cancelled, make sure we notify   
  22.       // the node that we are done   
  23.       if (typeof callback == "function") {   
  24.         //alert(callback);   
  25.         callback();   
  26.       }   
  27.     }   
  28.   },   
  29.     processResponse : function(response, node, callback){   
  30.         try {   
  31.           for(var i = 0; i < response.length; i++){   
  32.                 var n = this.createNode(response[i]);   
  33.                 if(n){   
  34.                     node.appendChild(n);   
  35.                 }   
  36.             }   
  37.             if(typeof callback == "function"){   
  38.                 callback(this, node);   
  39.             }   
  40.         }catch(e){   
  41.             this.handleFailure(response);   
  42.         }   
  43.     },   
  44.   
  45.     handleResponse : function(response, node, callback){   
  46.         this.transId = false;   
  47.         this.processResponse(response, node, callback);   
  48.         this.fireEvent("load"this, node, response);   
  49.     },   
  50.   
  51.     handleFailure : function(response, node, callback){   
  52.         this.transId = false;   
  53.         this.fireEvent("loadexception"this, node, response);   
  54.         if(typeof callback == "function"){   
  55.             callback(this, node);   
  56.         }   
  57.     }   
  58.   
  59. });    


上面的代碼可以直接在項(xiàng)目中使用,無(wú)需修改。
【六】最終DWRTree的實(shí)現(xiàn)包括 tree.js和 tree.html
tree.js完整代碼如下:
Java代碼
  1.  Ext.onReady(function(){    
  2.      
  3. Ext.tree.DWRTreeLoader = function(config) {   
  4.   Ext.tree.DWRTreeLoader.superclass.constructor.call(this, config);   
  5. };   
  6.   
  7. Ext.extend(Ext.tree.DWRTreeLoader, Ext.tree.TreeLoader, {   
  8.    args:[],   
  9.    requestData : function(node, callback) {   
  10.     if (this.fireEvent("beforeload"this, node, callback) !== false) {   
  11.   
  12.         
  13.       var callParams = new Array();   
  14.       var success = this.handleResponse.createDelegate(this, [node, callback], 1);   
  15.       var error = this.handleFailure.createDelegate(this, [node, callback], 1);   
  16.       callParams.push(node.id);   
  17.       callParams.push({callback:success, errorHandler:error});   
  18.   
  19.       //todo: do we need to set this to something else?   
  20.       this.transId=true;   
  21.       this.dataUrl.apply(this, callParams);   
  22.     } else {   
  23.       // if the load is cancelled, make sure we notify   
  24.       // the node that we are done   
  25.       if (typeof callback == "function") {   
  26.         //alert(callback);   
  27.         callback();   
  28.       }   
  29.     }   
  30.   },   
  31.     processResponse : function(response, node, callback){   
  32.         try {   
  33.           for(var i = 0; i < response.length; i++){   
  34.                 var n = this.createNode(response[i]);   
  35.                 if(n){   
  36.                     node.appendChild(n);   
  37.                 }   
  38.             }   
  39.             if(typeof callback == "function"){   
  40.                 callback(this, node);   
  41.             }   
  42.         }catch(e){   
  43.             this.handleFailure(response);   
  44.         }   
  45.     },   
  46.   
  47.     handleResponse : function(response, node, callback){   
  48.         this.transId = false;   
  49.         this.processResponse(response, node, callback);   
  50.         this.fireEvent("load"this, node, response);   
  51.     },   
  52.   
  53.     handleFailure : function(response, node, callback){   
  54.         this.transId = false;   
  55.         this.fireEvent("loadexception"this, node, response);   
  56.         if(typeof callback == "function"){   
  57.             callback(this, node);   
  58.         }   
  59.     }   
  60.   
  61. });     
  62.   
  63.   
  64. var myTree = new Ext.tree.TreePanel({      
  65.         el:Ext.getBody(),     
  66.         autoScroll:true,   
  67.         animate:true,   
  68.         width:'300px',   
  69.         height:'800px',   
  70.         enableDD:true,   
  71.         containerScroll: true,    
  72.         root:new Ext.tree.AsyncTreeNode({   
  73.              text: '單位',   
  74.              draggable:false,   
  75.              id:'1' }),   
  76.         loader:new Ext.tree.DWRTreeLoader({    
  77.                    dataUrl:treeBusinessService.getAllChildren,    
  78.                    listeners : {   
  79.                               'beforeload' : function( node) {   
  80.                                    myTree.getLoader().args[0]=(node.id!='root'?node.id:"1");   
  81.                                 }   
  82.                    }   
  83.                })   
  84.     });   
  85.        
  86.     myTree.render();   
  87.   
  88.   
  89.        
  90. });  

提個(gè)醒:這句
Java代碼
  1. myTree.getLoader().args[0]=(node.id!='root'?node.id:"1");  
不能錯(cuò)哦,它是和 DWRTreeLoader耦合的。

tree.html是這樣的:
Java代碼
  1. <html>   
  2. <head>         
  3.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">      
  4. <title>ExtJS-樹(shù)示例</title>   
  5. <link rel="stylesheet" type="text/css" href="ext2/resources/css/ext-all.css" />   
  6. <script type="text/javascript" src="ext2/adapter/ext/ext-base.js"></script>   
  7. <script type="text/javascript" src="ext2/ext-all.js"></script>   
  8.     
  9. <script type="text/javascript" src="dwr/interface/treeBusinessService.js "></script>   
  10. <script type="text/javascript" src="dwr/engine.js "></script>   
  11. <script type="text/javascript" src="dwr/util.js "></script>   
  12. <script type="text/javascript" src="js/tree.js"></script>    
  13.      
  14. </head>   
  15.        
  16. <body>   
  17.     
  18. </body>   
  19. </html>  


  好了,基于Spring+hibernate+dwr+EXTJs的DWRTreeLoader的實(shí)現(xiàn)就是這樣。本想提供完整代碼下載。但想來(lái)想去還是讓讀者自己結(jié)合我的文章邊做邊體會(huì)比較好。說(shuō)不定還能優(yōu)化我的代碼呢。你說(shuō)是嗎?

  還有comBoboxTree的實(shí)現(xiàn)沒(méi)有寫(xiě)。也不知大家感興趣沒(méi)?還是歡迎大家多提意見(jiàn)吧。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
spring和ibatis的整合
幾種獲得spring里注冊(cè)Bean的方法
在集成Spring Axis 的環(huán)境下webservice的發(fā)布和部署 - Aflye...
spring and hibernate,spring and tapestry整合篇
Spring HTTP Invoker例子
Spring、Hibernate、Struts1整合的方式
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服