DWR3.0 dwr 返回值(数组,集合,Map)
首先导入项目所需要的包,如下:dwr.jar,commons-logging-1.0.4.jar,版本可以调整
1.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<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>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
2.DWRTest.java
package com.micro;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SuppressWarnings("unchecked")
public class DWRTest {
/**
* 第一个简单调用
*/
public String getStr() {
return "第一个dwr示例,调用成功";
}
/**
* 带传递参数的调用,返回String
*/
public String getInfo(String name, int age, String address) {
return "我的名字叫" + name + ",现年" + age + "岁," + "来自" + address;
}
/**
* 返回数组Array
*/
public String[] getStrArray() {
return new String[] { "one", "two", "three", "go!" };
}
/**
* 返回集合List
*/
public List getList() {
List list = new ArrayList();
list.add("welcome");
list.add("to");
list.add("BeiJing");
return list;
}
/**
* 返回Map类型
*/
public Map getMap() {
Map map = new HashMap();
map.put("name", "周星星");
map.put("hobby", "逃课");
return map;
}
/**
* 返回二维数组类型
*/
public List getArrayList() {
List list = new ArrayList();
list.add(new String[] { "1", "2", "3" });
list.add(new String[] { "one", "two", "three", "four", "five" });
return list;
}
/**
* Exception处理
*/
public List getListTest(List list) {
try {
list.get(0);
} catch (Exception e) {
throw new NullPointerException("数据位空");
}
return list;
}
}
3.dwr.xml
<?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 javascript="dwr" creator="new">
<param name="class" value="com.micro.DWRTest" />
</create>
<!-- 类型转换为JavaBean的处理 -->
<create javascript="dwrBean" creator="new" scope="request">
<param name="class" value="com.micro.UserRs" />
</create>
<convert match="com.micro.User" converter="bean">
<param name="include" value="name,pass" />
</convert>
<!-- 异常Exception的处理 ,默认情况下dwr对异常的处理就是一个弹出框提示为Error-->
<create javascript="dwrException" creator="new">
<param name="class" value="com.micro.DWRTest" />
</create>
<convert match="java.lang.NullPointerException" converter="exception" />
</allow>
</dwr>
4.mydwr.js
/**
* 无参数
*/
function invoke1(){
dwr.getStr(
function(value){
alert(value);
}
);
}
/**
* 有参数
*/
function invoke2(){
dwr.getInfo("长江七号",3,"火星",
function(value){
alert(value);
}
);
}
/**
* 返回数组
*/
function invoke3(){
dwr.getStrArray(
function(array){
var str="";
for(var i=0;i<array.length;i++){
str += array[i]+" ";
}
alert(str);
}
);
}
/**
* 返回集合(集合和数组的处理方式一样)
*/
function invoke4(){
dwr.getList(
function(list){
var str="";
for(var i=0;i<list.length;i++){
str += list[i];
}
alert(str);
}
);
}
/**
* 返回Map
*/
function invoke5(){
dwr.getMap(
//有如下两种处理方式
/*1)已知map的key*/
function(map){
alert("姓名:"+map.name+",爱好:"+map.hobby);
}
/*2).遍历的方式
function(map){
for(var key in map){
alert(key+":"+map[key]);
}
}*/
);
}
/**
* 返回数组的集合(二维数组)
*/
function invoke6(){
dwr.getArrayList(
function(arrayList){
var str="";
for(var i=0;i<arrayList.length;i++){
for(var j=0;j<arrayList[i].length;j++){
str += arrayList[i][j];
}
str+="\n\r";
}
alert(str);
}
);
}
/**
* 同步设置
*/
function invoke7(){
dwr.engine.setAsync(false);//设置同步,那么后续的方法才能按照顺序执行
invoke1();
invoke2();
}
/**
* 批处理batch(按照先后顺序执行)
*/
function invoke8(){
dwr.engine.beginBatch();
invoke1();
invoke2();
dwr.engine.endBatch();
}
5.index.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<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/dwr.js'></script>
<script type="text/javascript" src="mydwr.js"></script>
</head>
<body>
<input type="button" value="DRW1" onclick="invoke1()" />
<br />
<input type="button" value="DRW2" onclick="invoke2()" />
<br />
<input type="button" value="DRW3" onclick="invoke3()" />
<br />
<input type="button" value="DRW4" onclick="invoke4()" />
<br />
<input type="button" value="DRW5" onclick="invoke5()" />
<br />
<input type="button" value="DRW6" onclick="invoke6()" />
<br />
<input type="button" value="DRW7" onclick="invoke7()" />
<br />
<input type="button" value="批处理测试" onclick="invoke8()" />
</body>
</html>
上述,index.jsp页面就对上述各种dwr的返回类型和批处理(batch)做了处理,做了简单的测试,Ok,测试通过,下面再介绍几个页面,
对dwr其他功能的一些简单测试:
6.异常处理:exception.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<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/dwrException.js'></script>
<script type="text/javascript" src="mydwr.js"></script>
<script type="text/javascript">
function convert(){
var list;
dwrException.getListTest(list,
{
exceptionHandler:function(msg){
alert(msg);
},
callback:function(data){
alert(data);
}
}
);
}
</script>
</head>
<body>
<input type="button" value="异常测试" onclick="convert()"/>
</body>
</html>
7.dwr.util.getValue()调用,dwrfunc.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<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/dwr.js'></script>
<script type="text/javascript" src="mydwr.js"></script>
</head>
<body>
<input type="text" name="name" id="nameid" />
<br/>
<input type="button" value="EL通过id取值" onclick="alert(${'nameid'}.value)" />
<br />
//如果要是有dwr.util提供的功能,必须引入dwr/util.js文件,dwr3之后,有写函数内写name或id都可以
<br/>
<input type="button" value="dwr.util通过id" onclick="alert($('nameid').value)" />
<br />
<input type="button" value="dwr.util通过name" onclick="alert($('name').value)" />
<br />
<input type="button" value="dwr.util通过name/id" onclick="alert(dwr.util.getValue('name'))" />
<br />
</body>
</html>
8.对JavaBean的传递和返回
User.java:
package com.micro;
public class User {
private String name;;
private String pass;
//get/set方法....
}
UserRs.java:
package com.micro;
public class UserRs {
public User convertUser(User user) {
user.setName("admin");
user.setPass("123456");
return user;
}
}
bean.jsp:
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<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/dwrBean.js'></script>
<script type="text/javascript" src="mydwr.js"></script>
<script type="text/javascript">
function convert(){
var uname = $("name").value;
var upass = $("pass").value;
var obj = {name:uname,pass:upass};
dwrBean.convertUser(obj,function(data){
$("uname").value = data.name;
$("upass").value = data.pass;
});
}
</script>
</head>
<body>
<input type="text" name="name" id="uname" value="you name"/><br/>
<input type="text" name="pass" id="upass" value="your password"/><br/>
<input type="button" value="测试处理" onclick="convert()"/>
</body>
</html>
这些,只是对dwr的简单应用,其中的配置都在dwr.xml中,大家可以举一反三,通常情况下,dwr和spring要结合使用,下面给出一个简单的配置说明:
比如:
<!-- 验证登陆名是否存在 -->
<create creator="spring" javascript="loginServiceDWR" scope="request">
<param name="beanName" value="coreLoginService" />
<include method="checkLogin" />
</create>
其中,creator="spring",表明由spring来创建该对象,javascript="loginServiceDWR",说明客户端的调用名称叫"loginServiceDWR",<param name="beanName" value="coreLoginService" />指明了spring配置文件中,id为"coreLoginService"的这么一个bean,<include method="checkLogin" />,对外公开的方法是"checkLogin" ,调用过程同上述其他类型调用相同,不同就是配置而已。上述代码,仅供参考。
注意:引入dwr的js文件的顺序不能错了,如:
<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/dwrBean.js'></script>
先引入dwr自身的,再引入自己的。
DWR3.0 dwr 返回值(数组,集合,Map)的更多相关文章
- CXF2.7整合spring发布webservice,返回值类型是Map和List<Map>类型
在昨天研究了发布CXF发布webservice之后想着将以前的项目发布webservice接口,可是怎么也发布不起来,服务启动失败,原来是自己的接口有返回值类型是Map. 研究了一番之后,发现: we ...
- 关于malloc(0)的返回值问题--这两天的总结与实践篇
就像我在http://www.cnblogs.com/wuyuegb2312/p/3219659.html 文章中评论的那样,我也碰到了被提问这个malloc(0)的返回值问题,虽然感觉这样做在实际中 ...
- js返回值 数组去重
function myfun(arr){ var arr1 = new Array(); var len = arr.length; ;i <len ;i++){ ) { arr1.push(a ...
- mybatis 返回值类型是Map
<select id="selectByMemberKey" resultType="java.util.HashMap"> SELECT memb ...
- MyBatis3_[tp-26-27]_映射文件_select_返回List_记录封装Map:返回单个元素的Map或者整体Map集合
笔记要点出错分析与总结工程组织 1.定义接口 public interface EmployeeMapper { //多条记录封装到一个map中: Map<Integer,Employee> ...
- JS数组方法的的返回值和是否改变该数组总结
concat() 方法 concat() 方法用于连接两个或多个数组. 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. 返回值 返回一个新的数组.该数组是通过把所有 arrayX 参数添 ...
- libusb_bulk_transfer返回值不是0
libusb_bulk_transfer返回值不是0 libusb_bulk_transfer返回值不是0libusb_bulk_transfer返回值不是0 ?????
- MyBatis中Mapper的返回值类型
insert.update.delete语句的返回值类型 对数据库执行修改操作时,数据库会返回受影响的行数. 在MyBatis(使用版本3.4.6,早期版本不支持)中insert.update.del ...
- java基础35 双例集合Map及其常用方法
单例集合体系: ---------| collection 单例集合的根接口--------------| List 如果实现了list接口的集合类,具备的特点:有序,可重复 注:集合 ...
随机推荐
- 2015最新百度搜索引擎(seo优化)排名算法
多少年来,对于弄清百度排名算法成为了一代又一代站长的最高目标.随着百度推出了搜索引擎网页质量**,直接揭开了神秘的百度排名算法,这是作为站长福音啊.现在小编就来为大家介绍一下. 首先想要得到直接需要的 ...
- 【笔记】ASP.NET MVC Model元数据
问题1:什么叫Model元数据? Model元数据,是针对数据类型的一种描述信息.由于复杂类型(或者说类型嵌套的存在,比如CustomerModel中有一个属性为复杂类型Address)的存在,因此M ...
- 【BZOJ】【3439】Kpm的MC密码
Trie树/可持久化线段树 神题啊……搞了我一下午= =(其实第233个提交也是我的) 我一开始的思路:这个找kpm串的过程,其实就跟在AC自动机上沿fail倒着往下走是差不多的(看当前是哪些点的后缀 ...
- fpu栈溢出
老大们遇到个问题,有一堆浮点数运算,分开写就对,合一起就溢出. 是因为定义的函数返回float的时候,别的地方声明是void错了,这样的错误累计八次之后,浮点数寄存器就满了.没地方放就错了. 函数前面 ...
- 系统使用 aspose.cell , 使得ashx第一次访问会变很慢
网站放在IIS后, 在网站第一次访问后. 回收应用程序池 第一次访问aspx页面还是比较快. 但第一次访问ashx会很慢. 后发现原因: aspose.cell的5.3...版本. 的原 ...
- vml 在IE8 不显示的问题, Group不能用等问题.
IE8 不显示的问题: <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> ...
- 三维云模拟Three.js
http://www.mrdoob.com/#/131/clouds http://www.webgl.com/2012/03/webgl-demo-clouds/ <!DOCTYPE html ...
- 自定义TexturePacker插件导出自己的plist文件
原地址:http://www.cppblog.com/sunicdavy/archive/2014/02/06/205645.html cocos2dx引擎使用plist文件, 一种特殊的xml格式作 ...
- C#中“貌似”跳出while(true)死循环
当程序第一次执行到Read()函数时,程序会被阻塞,然后输入字符,Enter之后程序被激活,windows平台会自动在输入字符之后加入回车符和换行符,此时输入流中就有三个字符,然而read每次只读取一 ...
- PHP7安装笔记
PHP7安装笔记 时间 -- :: 喵了个咪 原文 http://www.hdj.me/php7-install-note 主题 PHP # 安装mcrypt yum install -y php-m ...