这部分将实际开发一个应用,套用了一个老外的示例模板,做了一个在线礼品的简易版本。
先讲一下应用的结构
页面端:
demo.jsp用来展示界面
服务端:
DemoAction是Struts中的Action子类负责控制转换,
DemoFacade是业务类负责业务处理。
Goods是一个业务实体类
Struts部分的配置就忽略不说了,实际上这个应用并没有包含Struts的配置
主要讲一下dwr的配置,首先需要在web.xml增加下面的servelt映射:
xml 代码
<servlet>
<description>Direct Web Remoter Servlet</description>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
如上uk.ltd.getahead.dwr.DWRServlet是dwr的核心,用来处理javascript的对远程方法的调用,还有其他参数请参考相关文档。
然后,需要在dwr.xml配置相应的远程方法(与具体需要在客户端调用的方法相关),如下为演示应用的配置:
xml 代码
<dwr>
<allow>
<convert converter="bean" match="dwr.demo.Goods"/>
<create creator="new" javascript="DemoAction" class="dwr.demo.DemoAction">
<include method="query4dwr"/>
<include method="copy4dwr"/>
<include method="paste4dwr"/>
</create>
<create creator="new" javascript="DemoFacade" class="dwr.demo.DemoFacade">
<include method="queryList"/>
<include method="restore"/>
<include method="del"/>
</create>
</allow>
</dwr>
如上有一个转换器(converter)是用来映射dwr.demo.Goods为bean类型,其他转换器类型请参考相关文档;还有两个创建器分别创建 javascript中的DemoAction类和DemoFacade类,分别对应dwr.demo.DemoAction类和 dwr.demo.DemoFacade,其中定义的方法就可以从javascript中直接调用了。
最后,我们需要在页面中包含相应的javascript:
<script src="http://www.zhmy.com/dwr/interface/DemoAction.js"></script>
<script src="http://www.zhmy.com/dwr/interface/DemoFacade.js"></script>
<script src="http://www.zhmy.com/dwr/engine.js"></script>
<script src="http://www.zhmy.com/dwr/util.js"></script>
如上,dwr/interface/DemoAction.js和dwr/interface/DemoFacade.js是dwr自动生成的 javascript文件,包含相应的类及方法,dwr/engine.js是dwr的核心引擎脚本处理客户端调用的转换,dwr/util.js包含了工具函数简化页面处理。
下面以查询为例,看一下dwr的具体使用:
DemoAction:
public List query4dwr(int type, boolean needClear, HttpServletRequest request) {
if (needClear) request.getSession().removeAttribute("dwr.demo.goodsId");
return demoFacade.queryList(type);
}
demo.jsp:
function updateResults() {
DWRUtil.removeAllRows("goodsbody");
var type = document.getElementById("type").value;
DemoAction.query4dwr(type, true, fillTable);
}
function fillTable(goods) {
document.forms[0].select.checked = false;
document.getElementById("totalRecords").innerHTML = goods.length;
DWRUtil.addRows("goodsbody", goods, [ addCheckbox, getName, getPrice, getCount]);
}
如上,DemoAction.query4dwr(type, true, fillTable)就可以直接调用DemoAction的方法了,这里fillTable是函数,dwr通过回调函数的方式来进行后续处理。比较一下 javascript和action中的方法参数,HttpServletRequest是可以不传的,dwr会自动加上,另一个就是回调参数放在最后,这是比较好的方式,其他方式请参考文档。
最后看一下,dwr如何与Struts集成,如下代码:
public ActionForward query(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
String type = request.getParameter("type");
//或者从form中取值
List goodsList = query4dwr(Integer.parseInt(type), true, request);
request.setAttribute("goodsList", goodsList);
return mapping.findForward("success");
}
public List query4dwr(int type, boolean needClear, HttpServletRequest request) {
if (needClear) request.getSession().removeAttribute("dwr.demo.goodsId");
return demoFacade.queryList(type);
}
前一个方法是Struts的方式,但dwr不支持,因此要重构一下在下面的方法才可以被dwr调用。
实际上,只有在方法中需要使用到HttpServletRequest是才需要重构方法,如果不使用HttpServletRequest,我们就可以直接调用业务层的类的方法,这样即简单又方便,如下:
demo.jsp:
function restore() {
DemoFacade.restore(updateResults);
}
DemoAction:
public synchronized void restore() {
goodsList.clear();
initGoods();
}
小结
dwr封装了ajax中与服务端交互的模块,通过直接调用服务端类的方法简化了客户端与服务端的交互。虽然说还缺省类似tag这样的组件,但已经很大程度简化了ajax的开发。
资源
dwr主站:http://getahead.ltd.uk/dwr
ajax主站:http://en.wikipedia.org/wiki/AJAX
分享到:
相关推荐
很抱歉,但根据您提供的信息,这似乎是一个关于物理学教科书第五版第三章习题解答的文件,可能包含了数学计算、物理原理的应用以及问题解决的步骤。然而,具体内容只给出了数字序列,没有实际的物理问题或解答内容,...
《机器人学导论》第三章主要探讨了机器人运动学中的笛卡尔坐标变换和Denavit-Hartenberg (DH) 参数法。DH 参数法是机器人学中一种广泛应用的表示机器人关节坐标和工具坐标之间关系的方法,它通过一系列4x4的转换矩阵...
信息论基础教程 第三章 课后答案 课后答案
在描述中提到,这份资源可能是针对该书的第三章和第四章的答案,这意味着我们将探讨这两章的核心概念和问题。第三章通常涉及词法分析(Lexical Analysis),这一阶段的任务是将源代码转换为一个个有意义的符号或...
书中的第三章、第四章和第五章分别涵盖了不同的算法主题,而提供的课后习题答案则是对这些章节理论知识的实践检验和巩固。 第三章通常会涉及到排序算法,这是一类基础且重要的算法,包括但不限于冒泡排序、选择排序...
无线通信原理与应用第二版中文第3章参考解答
本资源是一个关于拉扎维教材模拟集成电路第三章课后习题的答案解析中文版,纯手写的格式,共分为三个部分:PART1、PART2和PART3。 PART1 中,作者重新温习了拉扎维教材第三章的答案,并且手动整理了课后习题,加入...
操作系统
第三章 Servlet 编程第三章
数据挖掘第三版第三章课后习题答案.doc
(完整)《模拟电子技术基础教程》华成英——第三章习题解答.pdf
计算机系统基础第三章答案.pdf
人工智能课后答案第三章.pdf人工智能课后答案第三章.pdf人工智能课后答案第三章.pdf人工智能课后答案第三章.pdf人工智能课后答案第三章.pdf人工智能课后答案第三章.pdf人工智能课后答案第三章.pdf人工智能课后答案第...
电路邱关源第五版03第三章.ppt
郑君里第三版信号与系统课件,第三章,详解
概率论与数理统计第四版(第三章)课后答案
幼儿卫生学第三章婴幼儿身心保健PPT课件,幼儿卫生学第三章婴幼儿身心保健PPT,幼儿卫生学第三章婴幼儿身心保健
数据挖掘第3章习题例题数据挖掘第3章习题例题数据挖掘第3章习题例题
随机过程汪荣鑫第三章课后答案.pdf
数据结构第三章数据结构第三章数据结构第三章