最近项目改为用springMVC+mybatis+dwr,之前只做过ssh+dwr,一直在项目中配置dwr配了两天天才成功.刚开始百度了好多例子,但用到我这就不行了,老是错.所以得出一个结论什么还得靠自己,别人的只适合别人的项目,不一定适合自己.现在我把我们项目中dwr的用法写出来,希望可以帮助别人.
先导入 dwr.jar 包 , 在web.xml 中配置 dwr ,如下
<!-- 配置dwr -->
<servlet>
<servlet-name>dwr</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</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
配置好 dwr后,在dwr.xml 中进行配置,如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<!-- 通用dwr配置 -->
<dwr>
<allow>
<!-- 从Spring中获取Java对象 -->
<create javascript="ajaxController" creator="spring">
<param name="beanName" value="dwrService"></param>
</create>
</allow>
</dwr>
其中: 最主要的配置是<create>节点,它有两个属性 creator和javascript,creator属性设为 new ,表示通过 new创建对象示例,creator设为spring时,表示通过spring来创建对象示例;
javascript 属性表示页面引用时的脚本对象名. <create>下有一个<param>节点,定义要发布的类别,其 name 属性设为 class,value属性设为要发布的类别名.若name属性设置为 beanName,则value属性设为spring中对应bean的名称.还有 <include>节点,定义暴露的方法. 一般有两种情况,一种是我上面的这种配法,这里我用的是上面的情况,根据 spring的beanName进行配置.还有一种如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<!-- 通用dwr配置 -->
<dwr>
<allow>
<!-- 用new获取Java对象 -->
<create javascript="ajaxController" creator="new">
<param name="class" value="com.role.biz.userManage"></param>
</create>
</allow>
</dwr>
这对初学的人很重要,容易出现问题.一般creator为new时,对应的<param>中,name属性设为class;或creator为spring时,对应的<param>中name属性设为beanName.
dwr.xml中配置完后,应在 spring.xml 中配置刚才 spring所对应的 beanName.如下所示
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
">
<!-- dwr对应的 beanNam -->
<bean id="dwrService" class="zy.web.admin.qxManage.AjaxController">
</bean>
配完后,页面就可以请求了.如下:
引入dwr 的util.js和 engine.js,还有dwr/interface/ajaxController.js 这是dwr固定的写法
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/interface/ajaxController.js"> </script>
引完后直接通过 ajaxController调用getCd2()方法.
//查询二级菜单编号
var id2 = 0;
function cd2(id){
var str = id.split(",");
id2 = str[1];
document.getElementById("yjcdbh").value = str[0];
ajaxController.getCd2(str[0],cd2Ok);
}
这里的 ajaxController 与 dwr 中的 javascript对应的值一样.
根据调用方法,找到对应的 controller 类,如下
/**
* 文件名称:AjaxController.java
*/
package zy.web.admin.qxManage;
import java.util.HashMap;
import java.util.Map;
import org.directwebremoting.annotations.RemoteMethod;
import org.directwebremoting.annotations.RemoteProxy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import zy.service.admin.qxManage.AjaxService;
/**
*
* 项目名称:zyhome
* 类名称:AjaxController
* 类描述: ajax 获取值
* 创建人:金锋
* 创建时间:2013-12-6 下午05:01:39
* 修改人:金锋
* 修改时间:2013-12-6 下午05:01:39
* 修改备注:
* @version
*
*
*/
@Controller
@RemoteProxy
public class AjaxController {
private AjaxService ajaxService;
@RemoteMethod
public String getCd1(){
int num =0;
try {
Map<String,Object> nuMap=(Map<String, Object>) ajaxService.finMaxCd1().get(0);
num = Integer.parseInt(nuMap.get("cd1Num").toString())+1;
} catch (Exception e) {
e.printStackTrace();
}
return num+"";
}
public AjaxService getAjaxService() {
return ajaxService;
}
@Autowired
public void setAjaxService(AjaxService ajaxService) {
this.ajaxService = ajaxService;
}
}
再找到对应的 service,如下:
package zy.service.admin.qxManage;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import zy.mapping.admin.qxManage.RoleRightMapper;
/**
*
* 项目名称:zyhome
* 类名称:AjaxService
* 类描述:
* 创建人:金锋
* 创建时间:2013-12-10 上午10:32:12
* 修改人:金锋
* 修改时间:2013-12-10 上午10:32:12
* 修改备注:
* @version
*
*
*/
@Service("ajaxService")
public class AjaxService {
@Autowired
private RoleRightMapper roleRightMapper;
//获得一级菜单的最大编号
@SuppressWarnings("unchecked")
public List finMaxCd1()throws Exception
{
return roleRightMapper.finMaxCd1();
}
}
最后找到 mapper接口.如下:
package zy.mapping.admin.qxManage;
import java.util.List;
import java.util.Map;
/**
* 项目名称:zyhome
* 类名称:RoleRightMapper
* 类描述: 用户权限管理 mapper类
* 创建人:金锋
* 创建时间:2013-12-6 上午10:27:04
* 修改人:金锋
* 修改时间:2013-12-6 上午10:27:04
* 修改备注:
* @version
*/
public interface RoleRightMapper {
public List findAllMoudle()throws Exception;
//获得一级菜单的最大编号
@SuppressWarnings("unchecked")
public List finMaxCd1()throws Exception;
}
最后在mapper.xml 中找到方法名对应的要执行的sql语句.如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="zy.mapping.admin.qxManage.RoleRightMapper">
<!-- 获得一级菜单的最大编号 -->
<select id="finMaxCd1" parameterType="java.util.Map" resultType="java.util.Map">
select count(*) as cd1Num from zy_sys_rolecontent where MODULE_LEVEL =1
</select>
</mapper>
到这,springMVC+DWR+mybaits示例讲完了,每个公司用的都不一样,有时要看具体情况呢.
配完 dwr 后,想要知道是否配置成功,在项目启动后 ,在浏览器中输入: http://localhost:8080/项目名/dwr 打回车,如果成功会如下所示:
Classes known to DWR:
- ajaxController (zy.web.admin.qxManage.AjaxController)
我们点这个 ajaxController 链接,就会看到这个类下的所有方法:如下
Methods For: ajaxController (zy.web.admin.qxManage.AjaxController)
To use this class in your javascript you will need the following script includes:
<script type='text/javascript' src='/zyhome/dwr/interface/ajaxController.js'></script> <script type='text/javascript' src='/zyhome/dwr/engine.js'></script>
In addition there is an optional utility script:
<script type='text/javascript' src='/zyhome/dwr/util.js'></script>
Replies from DWR are shown with a yellow background if they are simple or in an alert box otherwise.
The inputs are evaluated as Javascript so strings must be quoted before execution.
- getCd1( );
可点击后面的 execute 按钮进行测试,看方法有没有问题. 到些在 springMVC+mybaits 中使用dwr就讲完了,希望对大家有帮助.