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 鏈接,就會看到這個類下的所有方法:如下

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就講完了,希望對大家有幫助.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章