`

關於dwr框架與spring結合的三級聯動的例子

阅读更多
最近做個案子,需要三級聯動的效果,不多說以下是例子的配置以及代碼,希望對大家有幫助

web.xml
<!--  Spring 服务层的配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/applicationContext.xml
            /WEB-INF/applicationContext-security.xml
            /WEB-INF/applicationContext-quartz.xml
        </param-value>
    </context-param>
    <!--  Spring 容器启动监听器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
      <servlet-name>dwr-invoker</servlet-name>
      <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
      <init-param>
         <param-name>debug</param-name>
          <param-value>true</param-value>
       </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dwr-invoker</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>


dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 0.4//EN" "http://www.getahead.ltd.uk/dwr/dwr.dtd">
<dwr>
  <allow>
    <create creator="spring" javascript="channel">
      <param name="beanName" value="DWRChannel"/>
    </create>
    <convert converter="bean" match="com.healthcare.bean.HCClass01" />
    <convert converter="bean" match="com.healthcare.bean.HCClass02" />
    <convert converter="bean" match="com.healthcare.bean.HCClass03" />
</allow>
</dwr>


Channel.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.healthcare.controller;

import com.healthcare.bean.HCClass01;
import com.healthcare.bean.HCClass02;
import com.healthcare.bean.HCClass03;
import com.healthcare.dao.HCClass01Dao;
import com.healthcare.dao.HCClass02Dao;
import com.healthcare.dao.HCClass03Dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;

/**
 *
 * @author lam
 */
public class Channel {
    
    @Autowired
    private  HCClass01Dao class01Dao;
    @Autowired
    private  HCClass02Dao class02Dao;
    @Autowired
    private  HCClass03Dao class03Dao;
    
    /**  
     * 根据一階编号获取二階
     * @param id  
     *            一階编号  
     * @return List<HCClass02><br>  
     */  
    public  Map getHCClass02sByHCClass01Id(String id) {   
        List<HCClass02> hCClass02s = null;
        
        if (class02Dao == null)
        {
            System.out.println("hCClass02Dao is null");
        }
        Map map = new HashMap();
        System.out.println("HCClass01ID:=========="+ id);
        if (!StringUtils.isEmpty(id)) {
            hCClass02s = class02Dao.getHCClass02ByHCClass01Id(id);
        }
        for (int i = 0; i < hCClass02s.size(); i++)
        {
            HCClass02 class02 = (HCClass02)hCClass02s.get(i);
            map.put(class02.getId(), class02.getName());
        }
        return map;
    }
    
    /**  
     * 根据二階编号获取三階
     * @param id  
     *            二階编号  
     * @return List<HCClass03><br>  
     */
    public Map getHCClass03sByHCClass02Id(String id) {   
        List<HCClass03> hCClass03s = null;
        Map map = new HashMap();
        System.out.println("HCClass02ID:=========="+ id);
        if (!StringUtils.isEmpty(id)) {
            hCClass03s = class03Dao.getHCClass03ByHCClass02Id(id);
        }
        for (int i = 0; i < hCClass03s.size(); i++)
        {
            HCClass03 class03 = (HCClass03)hCClass03s.get(i);
            map.put(class03.getId(), class03.getName());
        }
        return map;
    }
    
    public HCClass01Dao getClass01Dao() {
        return class01Dao;
    }
    public void setClass01Dao(HCClass01Dao class01Dao) {
        this.class01Dao = class01Dao;
    }
    
    public HCClass02Dao getClass02Dao() {
        return class02Dao;
    }
    public void setClass02Dao(HCClass02Dao class02Dao) {
        this.class02Dao = class02Dao;
    }
    
    public HCClass03Dao getClass03Dao() {
        return class03Dao;
    }
    public void setClass03Dao(HCClass03Dao class03Dao) {
        this.class03Dao = class03Dao;
    }
}


applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    
    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
          p:location="/WEB-INF/jdbc.properties" />
    
    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource"
          p:driverClassName="${jdbc.driverClassName}"
          p:url="${jdbc.url}"
          p:username="${jdbc.username}"
          p:password="${jdbc.password}"/>
              
    <!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) -->
    <bean id="entityManagerFactory"  
          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>  
        <property name="jpaVendorAdapter">  
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="database" value="MYSQL" />  
                <property name="showSql" value="false" />  
            </bean>  
        </property>  
        <property name="jpaPropertyMap">
            <map>
                <entry key="formatSql" value="true"/>
            </map>
        </property>
        <property name="persistenceUnitName" value="hc-unit" />
    </bean>  
    <bean id="transactionManager"  
          class="org.springframework.orm.jpa.JpaTransactionManager">  
        <property name="entityManagerFactory" ref="entityManagerFactory" />  
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager" /> 
    
    <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" />
    
    <bean id="hCClass01Dao" class="com.healthcare.dao.impl.HCClass01DaoImpl"/>
    <bean id="hCClass02Dao" class="com.healthcare.dao.impl.HCClass02DaoImpl"/>
    <bean id="hCClass03Dao" class="com.healthcare.dao.impl.HCClass03DaoImpl"/>
    <bean id="DWRChannel" class="com.healthcare.controller.Channel">
        <property name="class01Dao">
            <ref bean="hCClass01Dao" />
        </property>
        <property name="class02Dao">
            <ref bean="hCClass02Dao" />
        </property>
        <property name="class03Dao">
            <ref bean="hCClass03Dao" />
        </property>
    </bean>
</beans>



<script type='text/javascript' src='dwr/interface/channel.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
  
<script language="javascript">   
    // 根据选择的省,获得其所辖的市   
        function getHCClass02_1(){   
            var obj_class01 = document.getElementById("sel_class01_1");   
            var obj_class02 = document.getElementById("sel_class02_1");   
            var obj_class03 = document.getElementById("sel_class03_1");   
            var class01_Index = obj_class01.selectedIndex;   
            var class01_Value = obj_class01.options[class01_Index].value;
            if(class01_Value != "" && class01_Value != null){   
                channel.getHCClass02sByHCClass01Id(class01_Value,class02Return_1);   
            }else{
                DWRUtil.removeAllOptions(obj_class02);   
                DWRUtil.addOptions(obj_class02,{'':'請選擇'});   
                DWRUtil.removeAllOptions(obj_class03);   
                DWRUtil.addOptions(obj_class03,{'':'請選擇'});   
            }
			DWRUtil.removeAllOptions(obj_class03);   
            DWRUtil.addOptions(obj_class03,{'':'請選擇'});
        }   
		// 回调函数   
        function class02Return_1(data){   
            var obj_class02 = document.getElementById("sel_class02_1");   
            DWRUtil.removeAllOptions(obj_class02);   
            DWRUtil.addOptions(obj_class02,{'':'請選擇'});   
            DWRUtil.addOptions(obj_class02,data);   
        } 
		function getHCClass02_2(){   
            var obj_class01 = document.getElementById("sel_class01_2");   
            var obj_class02 = document.getElementById("sel_class02_2");   
            var obj_class03 = document.getElementById("sel_class03_2");   
            var class01_Index = obj_class01.selectedIndex;   
            var class01_Value = obj_class01.options[class01_Index].value;
            if(class01_Value != "" && class01_Value != null){   
                channel.getHCClass02sByHCClass01Id(class01_Value,class02Return_2);   
            }else{
                DWRUtil.removeAllOptions(obj_class02);   
                DWRUtil.addOptions(obj_class02,{'':'請選擇'});   
                DWRUtil.removeAllOptions(obj_class03);   
                DWRUtil.addOptions(obj_class03,{'':'請選擇'});   
            }
			DWRUtil.removeAllOptions(obj_class03);   
            DWRUtil.addOptions(obj_class03,{'':'請選擇'});
        }   
    	// 回调函数   
        function class02Return_2(data){   
            var obj_class02 = document.getElementById("sel_class02_2");   
            DWRUtil.removeAllOptions(obj_class02);   
            DWRUtil.addOptions(obj_class02,{'':'請選擇'});   
            DWRUtil.addOptions(obj_class02,data);   
        }   
    // 根据选择的市,获得所辖的县   
        function getHCClass03_1(){   
            var obj_class01 = document.getElementById("sel_class01_1");   
            var obj_class02 = document.getElementById("sel_class02_1");   
            var obj_class03 = document.getElementById("sel_class03_1");   
            var class02_Index = obj_class02.selectedIndex;   
            var class02_Value = obj_class02.options[class02_Index].value;   
            if(class02_Value != "" && class02_Value != null){   
                channel.getHCClass03sByHCClass02Id(class02_Value,class03Return_1);   
            }else{   
                DWRUtil.removeAllOptions(obj_class03);   
                DWRUtil.addOptions(obj_class03,{'':'請選擇'});   
            }   
        }   
		// 回调函数   
        function class03Return_1(data){   
            var obj_class03 = document.getElementById("sel_class03_1");
            DWRUtil.removeAllOptions(obj_class03);   
            DWRUtil.addOptions(obj_class03,{'':'請選擇'});   
            DWRUtil.addOptions(obj_class03,data);   
        }
		function getHCClass03_2(){   
            var obj_class01 = document.getElementById("sel_class01_2");   
            var obj_class02 = document.getElementById("sel_class02_2");   
            var obj_class03 = document.getElementById("sel_class03_2");   
            var class02_Index = obj_class02.selectedIndex;   
            var class02_Value = obj_class02.options[class02_Index].value;   
            if(class02_Value != "" && class02_Value != null){   
                channel.getHCClass03sByHCClass02Id(class02_Value,class03Return_2);   
            }else{   
                DWRUtil.removeAllOptions(obj_class03);   
                DWRUtil.addOptions(obj_class03,{'':'請選擇'});   
            }   
        }   
    // 回调函数   
        function class03Return_2(data){   
            var obj_class03 = document.getElementById("sel_class03_2");
            DWRUtil.removeAllOptions(obj_class03);   
            DWRUtil.addOptions(obj_class03,{'':'請選擇'});   
            DWRUtil.addOptions(obj_class03,data);   
        }
</script>

<tr>
        <td height="25" valign="top" class="R_title_font"><div align="right">所屬頻道</div></td>
        <td height="25" colspan="4" bgcolor="#FFFFCC" class="Rmenu_onetitle">
		<select name="hCClass01Id1" id="sel_class01_1" onchange="getHCClass02_1()">
				<option value="">請選擇</option>
			<c:forEach items="${hCClass01s}" var="hCClass01">
				<option value="${hCClass01.id}">${hCClass01.name}</option>
            </c:forEach>
		</select>
		<select name="hCClass02Id1" id="sel_class02_1" onchange="getHCClass03_1()">
				<option value="">請選擇</option>
		</select>
		<select name="hCClass03Id1" id="sel_class03_1">
				<option value="">請選擇</option>
		</select>
		</td>
	</tr>
	<tr>
		<td height="25" valign="top" class="R_title_font"><div align="right">所屬頻道</div></td>
        <td height="25" colspan="4" bgcolor="#FFFFCC" class="Rmenu_onetitle">
		<select name="hCClass01Id2" id="sel_class01_2" onchange="getHCClass02_2()">
				<option value="">請選擇</option>
			<c:forEach items="${hCClass01s}" var="hCClass01">
				<option value="${hCClass01.id}">${hCClass01.name}</option>
            </c:forEach>
		</select>
		<select name="hCClass02Id2" id="sel_class02_2" onchange="getHCClass03_2()">
				<option value="">請選擇</option>
		</select>
		<select name="hCClass03Id2" id="sel_class03_2">
				<option value="">請選擇</option>
		</select>
		</td>
      </tr>



此例子意在說明dwr與spring結合的配置,在Channel.java類中所定義的Dao,在applicationContext.xml中的配置
如此例Channel中定義:
@Autowired
    private  HCClass01Dao class01Dao;
    @Autowired
    private  HCClass02Dao class02Dao;
    @Autowired
    private  HCClass03Dao class03Dao;

以及在applicationContext.xml中的配置
<bean id="hCClass01Dao" class="com.healthcare.dao.impl.HCClass01DaoImpl"/>
    <bean id="hCClass02Dao" class="com.healthcare.dao.impl.HCClass02DaoImpl"/>
    <bean id="hCClass03Dao" class="com.healthcare.dao.impl.HCClass03DaoImpl"/>
<bean id="DWRChannel" class="com.healthcare.controller.Channel">
        <property name="class01Dao">
            <ref bean="hCClass01Dao" />
        </property>
        <property name="class02Dao">
            <ref bean="hCClass02Dao" />
        </property>
        <property name="class03Dao">
            <ref bean="hCClass03Dao" />
        </property>
    </bean>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics