什么是DWR?
DWR是一种AJAX解决方案!
DWR包括一个java库,以及一套javascript,使得我们可以用一种非常简单的方式,在页面上使用javascript直接调用后台的java对象!
DWR架构
DWR的javascript库包括几个部分:dwr的javascript引擎(即对AJAX调用的封装)、dwr提供的一些非常有用的辅助javascript函数库、以及dwr自动帮我们生成的专门用于调用后台JavaBean方法的javascript库!
Dwr在运行的时候,动态生成一个javascript库,这个库是对后台javabean调用的封装,我们可以直接使用这个库来实现直接调用JavaBean的目的!
如何下载、安装与使用?
1、下载dwr.jar,将其加入web-inf/lib目录
<servlet> <servlet-name>dwr-invoker</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-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>
3、配置dwr,即在WEB-INF目录下,添加dwr.xml文件,让dwr知道在运行的时候应该给哪些JavaBean生成相应的javascript库!
<?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> <allow> <create creator="new" javascript="test1"> <param name="class" value="com.bjsxt.dwr.Test1"/> </create> </allow> </dwr>这个配置的意思是,要创建的是 Test1 对象的 javascript 库,而且这个库的名字叫 test1 ,同时,这也是我们在 JSP 页面上调用这个对象的时候所使用的名称,请看下面的 JavaBean 代码和 实例:
4、下面是Test1这个JavaBean的源代码:
package com.bjsxt.dwr; public class Test1 { public String sayHello(String name){ return "你好,"+name; } }
5、JSP页面使用
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <Meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <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/test1.js"></script> <title>Insert title here</title> <script type="text/javascript"> function sayHello(){ test1.sayHello("李四ddd",function(data){ alert(data); } ); } </script> </head> <body> <a href="#" onclick="sayHello()">Test1</a> </body> </html>
让我们简单看一下这个JSP文件:首先引入DWR中的两个核心javascript库:engine.js和util.js,它们分别是dwr中的核心引擎库和辅助工具函数库!
第三个引入的dwr/interface/test1.js,实际上这个文件并不存在,这是由dwr在运行的时候动态生成的!test1这个名称,跟dwr.xml文件中配置的对应对象的javascript属性一致!
而且,我们在使用的时候,直接使用test1这个名称,作为这个对象的引用。直接调用这个对象的方法:sayHello,这个方法的名称必须与JavaBean中的方法名称一致!
sayHello方法有一个参数,同时返回一个值。我们可以直接传递参数,同时指定一个javascript函数来处理这个返回值(如上例所示)。
b: 如何处理返回值: 定义一个函数来处理返回值,这个函数有一个参数,就是JavaBean方法的返回值
DWR Javascript库中常用函数的使用
设置异步/同步模式
默认情况下,DWR以异步的方式跟服务器通信,即可以同时向服务器发送请求,如果想要改为同步的方式,可以调用:dwr.engine.setAsync(false);
a: 获得对某个页面元素对象的引用: $(“元素的ID或名称”)
b: 对列表元素的支持
dwr.util.removeAllOptions()
dwr.util.addOptions()
dwr.util.getValue()
dwr.util.setValue()
级联下拉框的实现