最近項目改爲用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.
可點擊後面的 execute 按鈕進行測試,看方法有沒有問題. 到些在 springMVC+mybaits 中使用dwr就講完了,希望對大家有幫助.