`
lucifinilhades
  • 浏览: 87288 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

DWR的应用过程

阅读更多

编辑Java类

package org.lucifer.dwr;

import org.directwebremoting.annotations.Param;
import org.directwebremoting.annotations.RemoteMethod;
import org.directwebremoting.annotations.RemoteProxy;
import org.directwebremoting.annotations.ScriptScope;
import org.directwebremoting.create.NewCreator;

@RemoteProxy(creator=NewCreator.class, name="service", scope=ScriptScope.PAGE,
		creatorParams=@Param(name="class", value="org.lucifer.dwr.AjaxService"))
public class AjaxService {
	@RemoteMethod
	public String welcome(String yourName) {
		StringBuilder sb = new StringBuilder("欢迎使用DWR应用示例,你是:");
		sb.append(yourName).append(".");
		return sb.toString();
	}
}

 

编辑配置web.xml文件

要应用DWR框架,首先需要在web.xml文件中设置DWR,以下配置必须被添加到WEB-INF/web.xml文件中。在web.xml文件中设置DWR内容如下:

<servlet>
	<description>配置DWR核心Servlet</description>
	<servlet-name>dwr-invoker</servlet-name>
	<!-- 指定DWR核心Servlet的实现类 -->
	<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
	<init-param>
		<description>指定Web应用中要使用的DWR传输对象类和代理类</description>
		<param-name>classes</param-name>
		<param-value>org.lucifer.dwr.AjaxService</param-value>
	</init-param>
	<init-param>
		<description>指定DWR核心Servlet是否处于Debug状态</description>
		<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>

编写JSP

创建JSP文件,在文件中使用DWR需要注意以下事项:

  • 要引用DWR的JS文件,其中engine.js是必须要引用的文件,如果需要用到DWR提供的一些工具,还需要引用util.js文件。
  • 然后还要引用句DWR自动生成的JS文件,例如:dwr/interface/service.js,注意JS文件名要与Java类中的注解中定义的name属性一致。
  • JS里的service.welcome()方法和Java类的方法有一个区别,即多了一个参数,用来回调返回的数据。

下面是调用AjaxService类的welcome()方法的JSP文件示例,实现代码如下:

<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<c:set var="basePath" value="${pageContext.servletContext.contextPath}"/>

<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="UTF-8"/>
        <title>DWR 示例</title>
		<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
		<script type="text/javascript">jQuery.noConflict();</script>
		<script type="text/javascript" src="${basePath}/dwr/engine.js"></script>
		<script type="text/javascript" src="${basePath}/dwr/interface/service.js"></script>
		<script type="text/javascript" src="js/dwr_simple.js"></script>
		<script type="text/javascript" src="${basePath}/dwr/util.js"></script>
    </head>
    <body>
        <form id="myForm" name="myForm">
		<label for="user">请输入名字:</label>
		<input type="text" name="user" id="user" autocomplete="on" placeholder="请输入名字"/>
		<button type="button" name="clickMe" id="clickMe">测试</button>
	</form>
	<footer>
		<p><div id="console"></div></p>
	</footer>
    </body>
</html>

编写JavaScript文件

var logger = function(msg) {
	jQuery("<strong>").append(msg).after("<br/>").appendTo("#console");
};

jQuery(function() {
	var callbackHandler = {
		callback:function(data) {
			logger("进入回调函数.");
			jQuery("<span>").append(data).after("<br/>").prependTo("#console");
			logger("退出回调函数.");
		},
		errorHandler:function(msg) {
			logger("进入错误处理函数");
			jQuery("<strong>").append(msg).after("<br/>").appendTo("#console");
			logger("退出错误处理函数");
		},
		timeout:2000
	};

	var handler = function(event) {
		logger("进入事件处理函数.");
		var nameText = jQuery("#user").val();
		if(nameText != "") {
			logger("准备调用DWR方法");
			service.welcome(nameText, callbackHandler);
			logger("DWR方法执行完成");
		} else {
			alert("注意:名字字段不能为空!");
		}
		logger("退出事件处理函数.");
	};

	jQuery("#myForm").submit(function(event) {
		logger("触发onsubmit事件");
		handler(event);
		logger("完成onsubmit事件");
		this.stopPropagation();
		return false;
	});

	jQuery("#clickMe").click(function(event) {
		logger("触发onclick事件");
		handler(event);
		logger("完成onclick事件");
	});
});
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics