`
Supanccy2013
  • 浏览: 222716 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

dwr 之 前后台参数传递(囊括全面、综合)

    博客分类:
  • dwr
dwr 
阅读更多
注:
1,本博客实例,浏览器用firefox且装firbug插件。
2. 转载请注明出处。

下面是实例:
第一:dwr配置文件
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
	<!-- <allow> 标签中包括可以暴露给 javascript 访问的东西。 <create> 标签中指定 javascript 中可以访问的 
		java 类,并定义 DWR 应当如何获得要进行远程的类的实例。 creator="new" 属性指定 java 类实例的生成方式, new 意味着 
		DWR 应当调用类的默认构造函数来获得实例,其他的还有 spring 方式,通过与 IOC 容器 Spring 进行集成来获得实例等等。 avascript代码访问对象时使用的名称。 
		<param> 标签指定要公开给 javascript 的 java 类名。 <include> 标签指定要公开给 javascript 的方法。 
		1,不指定的话就公开所有方法。 2, 如果配置了include,而没有包含前台 访问的方法则会前台js或报TypeError: Demo.sayHello 
		is not a function <exclude> 标签指定要防止被访问的方法。 -->
	<allow>
		<create creator="new" javascript="Demo">
			<param name="class" value="com.lhq.Demo" />
			<include method="justCall" />
			<include method="sayHello" />
			<include method="returnUser" />
			<include method="receivUserReturnUser" />
			<include method="returnListObject" />
			<include method="returnListPerson" />
			<include method="reviceAndReturnListPerson" />
		</create>
		<!-- <creator> 标签负责公开用于 Web 远程的类和类的方法, <convertor> 标签则负责这些方法的参数和返回类型。 convert 
			元素的作用是告诉 DWR 在服务器端 Java 对象表示和序列化的 JavaScript 之间如何转换数据类型。 DWR 自动地在 Java 和 
			JavaScript 表示之间调整简单数据类型。这些类型包括 Java 原生类型和它们各自的封装类表示, 还有 String 、 Date 、数组和集合类型。 
			DWR 也能把 JavaBean 转换成 JavaScript 表示,但是出于安全性的原因, 要求显式的配置, <convertor> 标签就是完成此功能的。 
			1, converter="bean" 属性指定转换的方式采用 JavaBean 命名规范 2, match=""com.dwr.TestBean" 
			属性指定要转换的 javabean 名称 3, <param> 标签指定要转换的 JavaBean 属性。 -->
		<convert converter="bean" match="com.lhq.Person">
			<param name="include" value="name,email,age,birthday"></param>
		</convert>
	</allow>
</dwr>  


第二:dwr后台处理类
package com.lhq;
import java.util.ArrayList;
import java.util.List;
public class Demo {
	  /**
	   * <只供前台调用>
	   * <没有参数,没有返回值>
	   * @author 陈超阳 
	   */
	  public void justCall()
	  {
		  System.out.println("hello ,chenchaoyang!");
	  }
	
	   /**
	    * <有参数有返回的dwr调用>
	    * @param name:接受前台传递的简单参数
	    * @return String 返回给前台的值
	    * @author 陈超阳
	    */
	   public String sayHello(String name) {   
	      return "Hello, " + name;   
	   } 
	   
	   /**
	    * <有返回bean的dwr调用>
	    * @return person 返回给前台Person對象
	    * @author 陈超阳
	    */
	   public Person returnUser() { 
		  Person person = new Person();
		  person.setName("chenchaoyang");
		  person.setAge(27);
		  person.setEmail("chenchaoyang2013@163.com");
		  person.setBirthday("1987-02-13");
	      return person;
	   } 
	   
	   /**
	    * <有参数bean,有返回bean的dwr调用>
	    * @param person:从前台传递过来的bean对象
	    * @return person 返回给前台Person對象
	    * @author 陈超阳
	    */
	   public Person receivUserReturnUser(Person personFromJsp) { 
		  Person person = new Person();
		  person.setName(personFromJsp.getName());
		  person.setAge(personFromJsp.getAge());
		  person.setEmail(personFromJsp.getEmail());
	      return person;
	   }  
	   
	   /**
	    * <返回list元素是Object>
	    * @return List<Object> 返回给前台List對象
	    * @author 陈超阳
	    */
	   public List<Object> returnListObject() { 
		  List<Object>  list = new ArrayList<Object>();
		  list.add(1);
		  list.add("1");
		  list.add('1');
		  list.add(1L);
	      return list;
	   }
	   
	   /**
	    * <返回list元素是Person>
	    * @return List<Person> 返回给前台List對象
	    * @author 陈超阳
	    */
	   public List<Person> returnListPerson() { 
		  List<Person>  list = new ArrayList<Person>();
		  Person chenchaoyang = new Person();
		  Person chenziyang = new Person();
		  
		  chenchaoyang.setName("chenchaoyang");
		  chenchaoyang.setAge(26);
		  chenchaoyang.setEmail("chenchaoyang2013@163.com");
		  chenchaoyang.setBirthday("1987-02-13");
		  
		  chenziyang.setName("chenziyang");
		  chenziyang.setAge(32);
		  chenziyang.setEmail("chenziyang2013@163.com");
		  chenziyang.setBirthday("1973-08-23");
		  
		  list.add(chenchaoyang);
		  list.add(chenziyang);
	      return list;
	   } 
	   
	   /**
	    * <返回list元素是Person>
	    * @return List<Person> 返回给前台List對象
	    * @param personList:从前台传递过来的person集合
	    * @author 陈超阳
	    */
	   public List<Person> reviceAndReturnListPerson(List<Person> personList) { 
		   List<Person> resultPersonList = new ArrayList<Person>();
		   for(Person person : personList)
		   {
			   resultPersonList.add(person);
		   }
	      return resultPersonList;
	   } 
}  


第三:后台实体Bean
package com.lhq;
import java.util.Date;
public class Person {
	String name;
	String email;
	int age;
	String birthday;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getBirthday() {
		return birthday;
	}
	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}
}


第四:前台访问jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
<title>Text Demo</title>   
		<script src='dwr/engine.js'></script>   
		<script type='text/javascript' src='dwr/util.js'></script>  
		<script src='dwr/interface/Demo.js'></script>   
<script>   
   var allname;  
   //仅仅调用后台的java方法,没有参数,没有返回值
   function justCall()
   {
	   Demo.justCall();
   }
   
   /**
   *向后台传递一个Stirng类型的参数,返回一个String类型的值
   *特别注意:如有返回值,必须设置回调函数来接受这个返回来的数值
   *下面的实例是用匿名函数来充当回调函数。
   */
   function hello()   
   {   
      var name = dwr.util.getValue("demoName");  
      Demo.sayHello(name, function(data)   
       {   
           dwr.util.setValue("demoReply", data);   
           allname=data;  
       });   
   } 
   
   /**
    *向后台传递一个Stirng类型的参数,返回一个String类型的值
    *特别注意:如有返回值,必须设置回调函数来接受这个返回来的数值
    *下面的实例是用真正函数来充当回调函数。
    */
    function hello2()   
    {   
       var name = dwr.util.getValue("demoName2");  
       //注意调用回调函数的方式,只写一个回调函数的名字即可
       Demo.sayHello(name,callBackForHello2);   
    }
    //注意回调函数需要一个接受返回来的数据的data参数
    function callBackForHello2(data)
    {
        dwr.util.setValue("demoReply2", data);   
        allname=data;  
    }
    
    /*
    *获取从服务器上返回的Bean
    */
    function getBean()
    {
    	Demo.returnUser(callBackForGetBean);
    }
    //回调函数,两种获得返回来对象的属性
    function callBackForGetBean(data)
    {
      console.log(data);
      // 不知道属性名称时,使用如下方法
      for(var property in data)
      {
    	  console.log("property:" + property + " value is:" + data[property]);
      }
      //知道名称名称时,使用如下方法
      console.log(data.name);
      console.log(data.email);
      console.log(data.age);
      console.log(data.birthday);
    }
	/*
	输出如下:(ff浏览器上)
	 *property:age value is:27
	demo.jsp (第 64 行)
	property:birthday value is:Wed Apr 16 2014 22:04:02 GMT+0800
	demo.jsp (第 64 行)
	property:email value is:chenchaoyang2013@163.com
	demo.jsp (第 64 行)
	property:name value is:chenchaoyang
	demo.jsp (第 64 行)
	chenchaoyang
	demo.jsp (第 67 行)
	chenchaoyang2013@163.com
	demo.jsp (第 68 行)
	27
	demo.jsp (第 69 行)
	Date {Wed Apr 16 2014 22:04:02 GMT+0800}
	 */
	 
	 //发送bean,接受bean
	 function sendBeanAndReciveBean()
	 {
		 var person = {name:"chenchaoyang",age:27,email:"chenchaoyang2013@163.com"};
		 Demo.receivUserReturnUser(person,callBackForSendBeanAndReciveBean);
	 }
	 function callBackForSendBeanAndReciveBean(data)
	 {
	      //知道名称名称时,使用如下方法
	      console.log(data.name);
	      console.log(data.email);
	      console.log(data.age);
	      console.log(data.birthday);
	 }
	 
	 //接受List<object>
	 function getListObject()
	 {
		 Demo.returnListObject(callBackGetListObject);
	 }
	 function callBackGetListObject(data)
	 {
		 console.log(data);
	 }
	 
	 //接受List<Person>
	 function getListPerson()
	 {
		 Demo.returnListPerson(callBackGetListPerson);
	 }
	 function callBackGetListPerson(data)
	 {
		 //知道属性名的情况下遍历方法(注意:此时data是js中Object的数组)
		 for(var i = 0; i < data.length; i++)
	     {
			 console.log(data[i].name);
			 console.log(data[i].email);
			 console.log(data[i].age);
			 console.log(data[i].birthday);
	     }
		 console.log("**************");
		 //不知道属性名称的这样写
		 for(var i = 0; i < data.length; i++)
		 {
			 for(var property in data[i])
			 {
  			   console.log(data[i][property]);
			 }
		 }
	 }
	 
	 //传递Person集合,返回Person集合,本功能是本博客的终极功能
	 function reviceAndReturnListPerson()
	 {
		 //组建js的person集合,其实就是一个Object的数组
		 var personList = [{name:"chenchaoyang",age:26,email:"chenchaoyang2013@163.com",birthday:"1987-02-13"},
		                   {name:"chenziyang",age:32,email:"chenziyang@qq.com",birthday:"1952-2-3"}];
		 Demo.reviceAndReturnListPerson(personList,callBackReviceAndReturnListPerson);
	 }
	 function callBackReviceAndReturnListPerson(data)
	 {
		 console.log(data);
		 //不知道person属性名称的情况下,按下面的代码走:
		 for(var i = 0; i < data.length; i++)
		 {
			 for(var property in data[i])
			 {
				 console.log(data[i][property]);
			 }
		 }
		 console.log("*******************************");
		//知道person属性名称的情况下,按下面的代码走:
		for(var i = 0; i < data.length; i++)
		{
			console.log(data[i].name);
			console.log(data[i].email);
			console.log(data[i].age);
			console.log(data[i].birthday);
		}
	 }
	 
</script>   
  </head>   
  <body>   
  <input value="只调用" type="button" onclick="justCall()"/><br> 
  
  <p> Name: <input type="text" id="demoName"/>   
            <input value="Send" type="button" onclick="hello()"/>  
             <br/>   
      Reply: <span id="demoReply"></span>   
  </p> 
  
  <p> Name: <input type="text" id="demoName2"/>   
            <input value="Send" type="button" onclick="hello2()"/>  
             <br/>   
      Reply: <span id="demoReply2"></span>   
  </p> 
  <input value="调用服务器返回Bean" type="button" onclick="getBean()"/><br> 
  <input value="发送Bean接受Bean" type="button" onclick="sendBeanAndReciveBean()"/><br> 
  <input value="获取服务器上的List<Object>" type="button" onclick="getListObject()"/><br>
  <input value="获取服务器上的List<Object>" type="button" onclick="getListPerson()"/><br> 
  <input value="发送List<Person>接受List<Object>" type="button" onclick="reviceAndReturnListPerson()"/><br>       
  </body>   
  </html>  

分享到:
评论

相关推荐

    dwr前后台交互

    **DWR(Direct Web Remoting)前后台交互详解** DWR(Direct Web Remoting)是一种JavaScript库,它允许Web应用程序在客户端(浏览器)与服务器端(后台)之间进行实时的、安全的、跨域的双向通信。DWR使得开发者...

    dwr实例,从后台取数据显示

    在你提供的实例中,“dwr实例,从后台取数据显示”表明这是一个使用DWR从服务器获取数据并在前端展示的简单应用。 1. **DWR的工作原理**:DWR通过在服务器上设置一个代理,允许JavaScript调用Java方法,就像它们是...

    dwr 前台调用后台的java类 hello

    《DWR:前台调用后台Java类的"Hello, World!"实践详解》 Direct Web Remoting(DWR)是一个开源的Java库,它允许Web应用程序在浏览器和服务器之间进行实时的、安全的通信,实现JavaScript与Java代码的交互。DWR简化...

    一个简单DWR例子,实现前后台不刷新页面交互

    在开发过程中,DWR的调试工具(如DWR逆向工程)可以帮助开发者快速了解哪些Java方法可以被前端调用,以及它们的参数和返回类型。此外,DWR还提供了错误处理机制,可以在出现问题时提供反馈。 总的来说,DWR是一种...

    DWR的基本原理以及前后台互相调用并整合SPRING的简易DEMO

    在这个“DWR的基本原理以及前后台互相调用并整合SPRING的简易DEMO”中,我们将探讨DWR的核心概念和如何将它与Spring框架集成。首先,我们需要理解DWR的工作机制: 1. **DWR Engine**:这是DWR的核心组件,负责处理...

    DWR调用及传参总结

    当需要传递单个参数时,如`callTestMethod3`,可以在调用时将参数赋值给变量`data`,然后传递给Java方法`testMethod3(data)`。 4. **返回JavaBean的Java方法调用**: 若Java方法返回一个JavaBean对象,如`...

    dwr回调函数得到后台list

    Direct Web Remoting (DWR) 是一种在Java服务器和JavaScript之间进行实时通信的技术,它允许在客户端的JavaScript中调用服务器端的Java方法,并将结果返回到JavaScript中。在这个场景中,我们关注的是如何在DWR回调...

    j2ee使用dwr进行后台交互

    5. **小demo**:这个项目可能包含了一个简单的示例,演示了如何在J2EE环境中集成DWR,以及如何使用DWR进行后台交互的基本步骤,这对于初学者理解和学习DWR非常有帮助。 6. **标签“dwr”**:这个标签明确了项目的...

    DWR与后台异步交互简单例子

    在本“DWR与后台异步交互简单例子”中,我们将探讨如何利用DWR来实现前后端的数据通信,提高用户体验。 首先,**DWR的核心理念**是通过提供一套简单的API,使得JavaScript可以直接调用Java方法,仿佛它们都在同一个...

    较全面DWR包

    在"较全面DWR包"中,包含了多个必要的组件,这些组件是DWR运行所必需的。解压后的7个文件应该全部放入项目的`lib`目录,这是因为DWR是一个依赖于多个库的框架,这些库共同协作来提供其功能。仅仅包含`dwr.jar`是不够...

    dwr dwrdwr

    dwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwr

    Ext tree 结合dwr 调用后台数据

    "Ext tree 结合dwr 调用后台数据"这个主题涉及到两个关键的技术:Ext JS的Tree组件和Direct Web Remoting (DWR)。这两个技术的结合使得前端用户界面能够动态地展示并操作后台的数据。 首先,让我们来了解一下**Ext ...

    DWR全面解析.doc

    1. **web.xml配置**:首先,你需要在`web.xml`中添加DWR的相关配置,包括设置debug参数以启用调试模式,以及其他必需的配置项。 2. **dwr.xml配置**:创建`dwr.xml`文件,这个文件通常放在项目根目录下,与`web.xml...

    dwr后台推送

    **DWR后台推送详解** Direct Web Remoting (DWR) 是一种开源的JavaScript库,它允许Web应用程序在浏览器和服务器之间进行实时的双向通信。在本文中,我们将深入探讨DWR的后台推送技术,包括DWR 2.0、3.0以及与...

    OA系统之DWROA系统之DWROA系统之DWROA系统之DWR

    OA系统之DWROA系统之DWROA系统之DWROA系统之DWROA系统之DWROA系统之DWROA系统之DWROA系统之DWROA系统之DWROA系统之DWROA系统之DWROA系统之DWROA...DWROA系统之DWROA系统之DWROA系统之DWROA系统之DWROA系统之DWROA系统之DWR

    DWR的配置和传值DWR的配置和传值

    - **一个Servlet,多个`dwr.xml`**:你可以在Servlet的初始化参数中指定多个`dwr.xml`配置文件,例如: ```xml &lt;servlet-name&gt;dwr-invoker &lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet &lt;param-name&gt;...

    dwr dwr项目 js 调用 java 后台 方法 js调用java后台方法 后台方法 异步

    `myMethod`即Java后台的某个方法名,`param1`和`param2`是参数,`function(response)`是回调函数,用于处理服务器返回的数据。 6. **异步调用** DWR默认采用异步模式,这意味着JavaScript调用Java方法不会阻塞...

    dwr 消息后台推送

    综上所述,"DWR消息后台推送"涉及到的主要知识点包括DWR的工作原理、后台推送技术的应用、DWR的配置与JavaScript接口使用、服务器端逻辑实现、以及性能优化和兼容性考虑。这个例子为开发者提供了一个实践DWR后台推送...

    dwr+spring实现后台向前台推送实例

    本实例是在一些网络资料的基础上整合出来的一个:以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之...

Global site tag (gtag.js) - Google Analytics