我是用spring与dwr融合的方式的来使用dwr的.不多说,就说使用步骤吧!
第一步 导入dwr.jar (version: 2.0.5)
第二步 配置web.xml文件
第三步 配置dwr.xml
第四步 编写js代码
第五步 页面引用
1.略
2.略
3.配置dwr.xml
前两步没什么好说的,我们来看第三步:
<dwr> <allow> //一个create对应 java中一个类 //creator="spring" 表明由spring来创建, //子节点<param> 就必须是 name="beanName" //value="***" 此处的***代表你 //spring的配置文件也就是applicationContext.xml文件中 //声明 bean 的id的值 //而 create标签的javascript属性的值就是用它来代表bean中的对象 <create javascript="userService" creator="spring"> <param name="beanName" value="userService"></param> <!-- 指定哪些文件可以通过dwr方式调用 --> <include method="checkUserName" /> <include method="checkEmail"/> </create> </allow> </dwr>
4.编写js代码(checkUser.js文件)
//定义一个全局变量,方便给页面中某个<span>标签动态的加上html代码 //你可以不理它的 var span_id ; function checkUserNameForExist(userName,span_info){ span_id = span_info ; return userService.checkUserName(userName,checkUserNameForExistBack); //此处的userService对应第三步中create 标签的javascript="userService", //而checkUserName的方法就是java中的方法,也即是userService bean中的checkUserName //当然参数 userName的获取你自己搞定了,通过document.getElementById("***").value等等 //然后,自己再传入这个方法中 } //此方法的参数是 userService这个bean的checkUserName方法的返回值 //我返回的是boolean类型 //也可以是 int String foalt double int[] string[] float[] double[] java.util.Date list set等 function checkUserNameForExistBack(varbool){ //这个方法是通过dwr方法调用后回调的方法 if(varbool){ //不存在了 document.getElementById(span_id).innerHTML="<font color='red'>此用户不存在</font>"; return false ; }else{ document.getElementById(span_id).innerHTML=""; return true ; } }
关于回调的说明:
<script type="text/javascript"> function doMethod(){ //调用方法:若公开的类是AAA,公开的AAA里的方法是bbb([参数]); //回调函数callBack() AAA.bbb([参数],callBack); } //data是后台返回的值,名字自取,也可省略,因为JS允许 function callBack(data) { //处理方法……; //如果callBack()没有写明返回值,可以通过argments[0]拿到 } </script> //其实我们调用AAA.bbb([参数],callBack),就是做了以下这一步: //(下面部分代码是包装好的,不在前台,所以即使你没有创建html或者jsp来调 //用,也可以通过localhost:8080/工程名/dwr 来看到你暴露的java类进行测试) function AAA() { }; AAA.bbb = function([参数], callback){ DWREngine._execute('/dwr/dwr', 'AAA', 'bbb', [参数], callback); } //通过在dwr.xml暴露的方法得到js里的方法,当我们调用AAA.bbb时候再通 //过/dwr/dwr转到DWRServlet中去用JAVA里的AAA.bbb方法,然后返回值到 //callback中(中间经过dwr.xml的convert)
比如: var getMav = function() { ecTypeService.editEcType(id, method, showModelView); } var showModelView = function(mav) { var model = mav.model; win = new Ext.Window( { border :true, layout :'fit' }); //这里的ecTypeService为spring管理的service,showModelView为回调方法,mav为回调返回的值
5.页面引用
一定记得引入以下四个文件
<script type="text/javascript" src="/dwr/engine.js"></script> <script type="text/javascript" src="/dwr/util.js"></script> <script type="text/javascript" src="/dwr/interface/userService.js"></script> <script src="/js/checkUser.js" type="text/javascript"></script>
然后就可以调用userService.js中的类
<script> function check_name(o,div_id){ ... } function checkDescription(description,div_id){ ... } function check_submit(f){ var str=""; if(!check_name(f.boardName,"boardName_info")){ str=str+"false|"; } var boardMaster = f.boardMaster.value ; //这里的 checkUserNameForExist 就是了 if(!checkUserNameForExist(boardMaster,"boardMaster_info")){ str=str+"false|"; } var oEditor = FCKeditorAPI.GetInstance("boardDescription"); var boardDescription=oEditor.GetXHTML(true); if(!checkDescription(boardDescription,"boardDescription_info")){ str=str+"false|"; } if(str==""){ return true; }else{ return false; } } </script>