Author: 江南白衣
DWR是一种新的Ajax方式,有别于访问URL的传统模式,DWR自己在服务端作了一个通用的Service层Gateway(Proxy),使得客户端的Javascript 可以直接操作远程的服务器端的Service层,再配合TrimPath JSTemplate 以Template而不是Dom Builder的方式将Service层返回的POJO渲染成复杂的页面,创造一种新的纯Ajax编程模式。
DWR的官方网站:http://getahead.ltd.uk/dwr/
TrimPath JSTemplate的官方网站:http://trimpath.com/project/wiki/JavaScriptTemplates
TrimPath JSTemplate 以类似Freemarker的语法用Javascript在IE客户端渲染页面,非常好用:
{for b in mybooks}
<p>${b.name}</p>
{/for}
在SpringSide前台的"Web服务"连接里有完整的演示。
修改web.xml,增加dwr-invoker servlet
增加dwr.xml,配置导出的service服务及要转换到客户端javascript 的bean.
如果安全要求不严格,可以很简单就配完,如果严格就麻烦一点,见dwr.xml的注释。
1.增加DWR一个动态生成的JavaScript及两个标准的Utils.js:
<script src="<c:url value="/dwr/interface/BookService.js"/>" type="text/javascript"></script>
<script src="<c:url value="/dwr/engine.js"/>" type="text/javascript"></script>
<script src="<c:url value="/dwr/util.js"/>" type="text/javascript"></script>
2.使用BookService对象:
Bookservice.js的名字在服务端dwr.xml里已定义,在其后的Javascript里,就可以用象在Java里面一样使用Bookservice对象和他的方法,如
BookService.findBooksByCategory(category, drawBooks);
其中第一个参数是服务端findBookByCategory的参数,第2个参数是返回时进行处理的函数。
3.使用TrimPath JSTemplate渲染返回的POJO:
下载并拷贝template.js到任意目录,然后在页面加入
<script src="<c:url value="/scripts/template.js"/>" type="text/javascript"></script>
然后按照Trimpath的简单语法在<textarea>里编写模版并把POJO放到模版里渲染
具体使用见/webapp/remoting/index.jsp中的<textarea id= "book_jst" >节点和function drawBooks(books) 函数