關於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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值