DWR中的异常处理以及util.js的初步用例

来源:互联网 发布:nginx反向代理配置详解 编辑:程序博客网 时间:2024/06/02 12:01

Let`s drink code


This is the web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><servlet><servlet-name>dwr-invoker</servlet-name><servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class><!-- 配置debug参数为true后,就可以访问DWR的控制台了,访问地址为http://ip:port/webApp/dwr/ --><!-- 开发阶段可以开启控制台,但在产品交付时,务必关掉控制台 --><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></web-app>

This is the DWR Config File----dwr.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN""http://getahead.org/dwr/dwr30.dtd"><dwr><allow><create creator="new" javascript="JSUserManager"><param name="class" value="com.jadyer.dwr.UserManager" /></create><convert match="com.jadyer.model.User" converter="bean" /><convert match="com.jadyer.model.Group" converter="bean" /><!-- 将Java中的异常对象转换为JavaScript表示 --><convert match="java.lang.Exception" converter="exception" /><!-- 在转换Java中的异常时,通常也会把StackTraceElement一并转换了 --><convert match="java.lang.StackTraceElement" converter="bean" /></allow></dwr>

This is the DWRException test page----exception.jsp

<%@ page language="java" pageEncoding="UTF-8"%><script type="text/javascript" src="<%=request.getContextPath()%>/dwr/interface/JSUserManager.js"></script><script type="text/javascript" src="<%=request.getContextPath()%>/dwr/engine.js"></script><script type="text/javascript" src="<%=request.getContextPath()%>/dwr/util.js"></script><script type="text/javascript">var user = {id:1, username:"张起灵", group:{id:2,name:"张大佛爷"}}; //典型的json///**// * DWR异常处理的第一种方式:回调函数处理// *///JSUserManager.addUser(user, callbackAddUser); //直接将json对象传给后台,它会被自动转换成方法所需的实体类//function callbackAddUser(serverReturnData){//alert(serverReturnData); //相比第二种异常处理方式,此时DWR返回的信息比较单一//}/** * DWR异常处理的第二种方式:元数据处理 */JSUserManager.addUser(user, {//此时根本就不会执行该回调函数,所以这里也就不需要提供回调函数了//callback:function callbackAddUser(serverReturnData){alert(serverReturnData);},errorHandler:function(errorMsg, exception){alert(errorMsg);                                   //print Error messagealert(dwr.util.toDescriptiveString(exception, 4)); //print Error Detailsalert(exception.javaClassName);                    //打印异常类的名称for(var ex in exception){alert(ex); //打印exception所包含的对象名称}}});</script>

This is the DWRUtil test page----util.jsp

<%@ page language="java" pageEncoding="UTF-8"%><script type="text/javascript" src="<%=request.getContextPath()%>/dwr/interface/JSUserManager.js"></script><script type="text/javascript" src="<%=request.getContextPath()%>/dwr/engine.js"></script><script type="text/javascript" src="<%=request.getContextPath()%>/dwr/util.js"></script><script type="text/javascript">function calAdd() {var a = dwr.util.getValue("a"); //it means document.getElementById("a").valuevar b = dwr.util.getValue("b");JSUserManager.calculatorAdd(parseInt(a), parseInt(b), function(serverReturnData){alert(serverReturnData);});}function initAddress() {dwr.util.removeAllOptions('address'); //移除<select id="address"/>下的所有optionsvar addressData = [{id:1,name:"黑龙江"}, {id:2,name:"哈尔滨"}, {id:3,name:"道里区"}]; //定义一个mapdwr.util.addOptions("address", addressData, "id", "name"); //四个参数:selectid,map,valueprop,textprop}function addAddress() {var addressName = dwr.util.getValue("addressName");var addressData = [{id:addressName, name:addressName}];dwr.util.addOptions("address", addressData, "id", "name");}function initUsers() {JSUserManager.list(function(serverReturnData){dwr.util.addRows("users", serverReturnData, cellFuncs, {escapeHtml:false});});}var cellFuncs = [function(data){return data.id},function(data){return data.username},function(data){return data.group.name},function(data){return "<input type='button' value='Test' onclick='alert(\"GoodJob\");'/>";}];function removeUsers() {dwr.util.removeAllRows('users');}function addColorUsers() {JSUserManager.list(function(serverReturnData){dwr.util.addRows("users", serverReturnData, cellFuncs, {rowCreator:function(options){var row = document.createElement("tr");var index = options.rowIndex * 50;row.style.color = "rgb(" + index + ",0,0)";return row;},cellCreator:function(options) {var td = document.createElement("td");var index = 255 - (options.rowIndex * 50);td.style.backgroundColor = "rgb(" + index + ",255,255)";td.style.fontWeight = "bold";return td;},escapeHtml:false});});}</script><input type="button" value="计算二者和" onclick="calAdd()"><input id="a" type="text"/> + <input id="b" type="text"/><br/><br/><input type="button" value="初始化地址" onclick="initAddress()"/><select id="address"></select><br/><br/><input type="button" value="添加新地址" onclick="addAddress()"/><input id="addressName" type="text"/><br/><br/><input type="button" value="初始化用户" onclick="initUsers()"/><input type="button" value="移除所有用户" onclick="removeUsers()"/><input type="button" value="新增炫彩用户" onclick="addColorUsers()"/><table border="6"><thead><tr><td>ID</td><td>userName</td><td>groupName</td><td>operate</td></tr></thead><tbody id="users"></tbody></table>

这是一个需要由DWR发布的Java类----UserManager.java

package com.jadyer.dwr;import java.util.ArrayList;import java.util.List;import com.jadyer.exception.UserException;import com.jadyer.model.Group;import com.jadyer.model.User;public class UserManager {public void addUser(User user){System.out.println("新增用户:" + user.getUsername());throw new UserException("新增用户失败:权限不足");}public List<User> list(){List<User> userList = new ArrayList<User>();userList.add(new User(1, "张起灵", new Group(1,"张启山族长")));userList.add(new User(2, "吴三省", new Group(2,"狗五爷之子")));userList.add(new User(3, "黑眼镜", new Group(2,"坑王之三叔")));return userList;}public int calculatorAdd(int a, int b){System.out.println("正在计算: " + a + " + " + b + " 的值");return a + b;}}

下面是我们自定义的异常类----UserException.java

package com.jadyer.exception;@SuppressWarnings("serial")public class UserException extends RuntimeException {public UserException() {}public UserException(String message, Throwable cause) {super(message, cause);}public UserException(String message) {super(message);}public UserException(Throwable cause) {super(cause);}}

最后是用到的两个实体类

package com.jadyer.model;public class User {private int id;private String username;private Group group;/*== 三个属性的setter和getter略 ==*/public User() {}public User(int id, String username, Group group) {this.id = id;this.username = username;this.group = group;}}public class Group {private int id;private String name;/*== 二个属性的setter和getter略 ==*/public Group() {}public Group(int id, String name) {this.id = id;this.name = name;}}

原创粉丝点击