三、编写后台控制代码
(一)实现业务逻辑层
1. 编写接口类ProvinceDao
package com.ssh.dao;
import java.util.List;
import com.ssh.po.Province;
/**
* ProvinceDao接口,定义要实现的方法
*
* @author nnhym
*
*/
public interface ProvinceDao {
public Province findProvinceById(Integer id);
public Province findProvinceByExample(Province person);
public List findAllProvince();
public List findProvinceByParentid();
public List findProvinceByIdAndParentid(Integer id);
}
2.编写ProvinceDao接口的实现类ProvinceDaoImpl
package com.ssh.dao;
import java.util.List;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.ssh.po.Province;
/**
* 实现ProvinceDao接口中定义的方法
*
* @author nnhym
*
*/
public class ProvinceDaoImpl extends HibernateDaoSupport implements ProvinceDao {
public List findAllProvince() {
List<Province> list=null;
try {
list=getHibernateTemplate().find("from Province");
} catch (DataAccessException e) {
System.out.println("==>1.查询所有的省市时出错:");
e.getStackTrace();
}
return list;
}
public Province findProvinceByExample(Province person) {
// TODO Auto-generated method stub
return null;
}
public Province findProvinceById(Integer id) {
// TODO Auto-generated method stub
return (Province) getHibernateTemplate().get(Province.class, id);
}
public List findProvinceByParentid() {
List<Province> list=null;
try {
list=getHibernateTemplate().find("from Province p where p.parentid=0");
} catch (DataAccessException e) {
System.out.println("==>2.查询所有的省市时出错:");
e.getStackTrace();
}
return list;
}
public List findProvinceByIdAndParentid(Integer id) {
List<Province> list=null;
try {
list=getHibernateTemplate().find("from Province p where p.parentid="+id);
} catch (DataAccessException e) {
System.out.println("==>3.查询所有的省市时出错:");
e.getStackTrace();
}
return list;
}
}
(二)实现数据访问层
1.实现接口类ProvinceService
package com.ssh.service;
import java.util.List;
import com.ssh.po.Province;
/**
* 定义要实现那些Service方法
*
* @author nnhym
*
*/
public interface ProvinceService {
Province findProvinceById(Integer id);
List findProvinceByParentId();
List findProvinceByAll();
List findProvinceByIdAndParentId(Integer id);
}
2.定义ProvinceService接口的实现类ProvinceServiceImpl
package com.ssh.service;
import java.util.List;
import com.ssh.dao.ProvinceDao;
import com.ssh.po.Province;
/**
* 实现service接口中定义的方法
*
* @author nnhym
*
*/
public class ProvinceServiceImpl implements ProvinceService {
ProvinceDao provinceDao;
public ProvinceDao getProvinceDao() {
return provinceDao;
}
public void setProvinceDao(ProvinceDao provinceDao) {
this.provinceDao = provinceDao;
}
public List findProvinceByAll() {
// TODO Auto-generated method stub
return provinceDao.findAllProvince();
}
public Province findProvinceById(Integer id) {
// TODO Auto-generated method stub
return provinceDao.findProvinceById(id);
}
public List findProvinceByParentId() {
// TODO Auto-generated method stub
return provinceDao.findProvinceByParentid();
}
public List findProvinceByIdAndParentId(Integer id) {
// TODO Auto-generated method stub
return provinceDao.findProvinceByIdAndParentid(id);
}
}
(三)在Spring中配置JavaBean
业务逻辑层和数据访问层编写完成以后就要在Spring中配置他们的关系
<!-- 配置provinceDao -->
<bean id="provinceDao" class="com.ssh.dao.ProvinceDaoImpl">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<!-- 配置provinceService -->
<bean id="provinceService" class="com.ssh.service.ProvinceServiceImpl">
<property name="provinceDao">
<ref local="provinceDao"/>
</property>
</bean>
(四)配置DWR
1.从DWR官方网站(http://directwebremoting.org/dwr/)上下载最新的dwr.jar包放入WebRoot/WEB-INF/lib目录下
2.在WebRoot/WEB-INF新建一个dwr.xml文件内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="spring" javascript="province">
<param name="beanName" value="provinceService"/>
</create>
<convert match="com.ssh.po.Province" converter="bean"></convert>
</allow>
</dwr>
3.在web.xml文件中配置dwr
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>
org.directwebremoting.servlet.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>
4.配置完成以后,将项目部署到Tomcat中。在浏览器中输入地址:http://localhost:8080/Test/dwr会出现如下页面,可以测试我们实现的方法是否正常
四、页面的实现
1.在jsp页面中配置dwr
通过测试页面我们可以看到,需要在jsp页面中添加如下配置:
<script type='text/javascript' src='/Test2/dwr/engine.js'></script>
<script type='text/javascript' src='/Test2/dwr/util.js'></script>
<script type='text/javascript' src='/Test2/dwr/interface/province.js'></script>
2.编写js
$(function() {
dwr.engine.setAsync(false);
getProvinceList();
getCityList();
getCountyList();
});
function getProvinceList() {
province.findProvinceByParentId({
callback : function(provincelist) {
dwr.util.removeAllOptions("sel_Pro");
dwr.util.addOptions("sel_Pro", [ {
name : "-请选择-",
value : "0"
} ], "value", "name");
dwr.util.addOptions("sel_Pro", provincelist, "id",
"name");
},
timeout : 5000
});
}
function getCityList() {
province.findProvinceByIdAndParentId(dwr.util.getValue("sel_Pro"), {
callback : function(citylist) {
dwr.util.removeAllOptions("sel_City");
dwr.util.addOptions("sel_City", [ {
name : "-请选择-",
value : "0"
} ], "value", "name");
dwr.util.addOptions("sel_City", citylist, "id", "name");
},
timeout : 5000
});
}
function getCountyList() {
province.findProvinceByIdAndParentId(dwr.util.getValue("sel_City"), {
callback : function(citylist) {
dwr.util.removeAllOptions("sel_County");
dwr.util.addOptions("sel_County", [ {
name : "-请选择-",
value : "0"
} ], "value", "name");
dwr.util.addOptions("sel_County", citylist, "id", "name");
},
timeout : 5000
});
}
五、测试页面
到此,三级联动的程序已经完成,测试页面如下
上一篇,知识简介,环境搭建:
http://blog.csdn.net/lingnnhym/article/details/7035405
源码下载: