最近在项目中用到DWR框架,对配置过程粗略的进行了总结,可分为以下几步:
1.下载 dwr.jar,放到工程的WEB-INF/lib目录下
2.配置web.xml,加入以下内容:
<!-- dwr servlet 配置,debug配置参数在发布模式下修改为false -->
<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>
<init-param>
<param-name>classes</param-name>
<param-value>java.lang.Object</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
3.在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" javas
<param name="beanName" value="linkMenuDwr" /> <!-- 公开给javascript的java类 -->
<param name="include" value="findModuleList" /> <!-- 公开给javascript的函数 -->
</create>
<convert match="hibernate.QyCnsfType" converter="bean">
<param name="include" value="ID, name"/> <!-- 公开给javascript的属性 -->
</convert>
</allow>
</dwr>
4. 在项目的src目录下,新建applicationContext-dwr.xml,配置dwr.xml中用到的bean(linkMenuDwr)
<?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: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.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<!-- 获取联动菜单 -->
<bean id="linkMenuDwr" class="com.yipu.business.dwr.LinkMenuDwr" scope="prototype">
<property name="qyCnsfService" ref="qyCnsfService" />
</bean>
</beans>
5. LinkMenuDwr类为普通的javaBean,代码如下:(其中注入的qyCnsfService为操作数据库的业务逻辑类,代码省略)
public class LinkMenuDwr{
private QyCnsfServiceqyCnsfService;
/**
* @Descrip:获取联动菜单
* @paramfatherID
*/
public List<QyCnsfType> findModuleList(Long fid){
return qyCnsfService.findModuleByFid(fid);
}
public QyCnsfService getQyCnsfService(){
return qyCnsfService;
}
public void setQyCnsfService(QyCnsfService qyCnsfService) {
this.qyCnsfService = qyCnsfService;
}
}
6. 在客户端的网页里引入以下内容:
<script type="text/javas
<script type="text/javas
<script type="text/javas
<script type="text/javas
<script type="text/javas
function changeSelect(srcID, srcValue) {
//用js调用java函数,完成对后台业务逻辑的调用
menumanager.findModuleList(srcValue, function(data){
//清空options集合(两种方式)
//$(srcID).options.length = 0;
var ops_lenth = $(srcID).options.length;
for(var i=0; i<ops_lenth; i++) {
$(srcID).options.remove(0);
}
//追加options集合
var op_def = new Option('----请选择----',"");
for(var i=0; i<=data.length; i++) {
$(srcID).options.add(op_def);
if(i < data.length)
op_def = new Option(data[i].name,data[i].ID); //name和ID为dwr.xml中公开的属性
}
});
}
</script>
body中的内容如下:
<body onload="changeSelect('v1', 0);">
<select id="v1" onchange="changeSelect('v2', this.value);"></select>
<select id="v2"></select>
</body>