springMVC+mybatis+dwr中如何使用dwr

      最近项目改为用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就讲完了,希望对大家有帮助.

     

  • 你可能感兴趣的:(springMVC+mybatis+dwr中如何使用dwr)