在开发过程中,抽象成模型,定义规范是非常有必要的,不仅可以简化代码,提高开发效率,也为自己减少了不少麻烦。

在开发中,因为DWZ这块是我负责,由于代码琐碎,重复度高,没有抽象封装,没有定义规范,别人不清楚都来问我,导致我经常在解决相同的问题,所以我把DWZ中的信息回馈这块抽象封装成通用模型,便于使用,也减少了自己的麻烦。

DWZ是客户端框架,自然需要接收后台传来的消息,可能是异常信息,可能是成功信息。

返回信息是json格式,其中包括状态码、callbackType类型、navTabId等。

我把这些信息都封装在AjaxObject中。

AjaxObject.java

packagecom.dwz.util;

/**
*
* callbackType如果是closeCurrent就会关闭当前tab
*只有callbackType="forward"时需要forwardUrl值
*
*form提交后返回json数据结构statusCode=DWZ.statusCode.ok表示操作成功, 做页面跳转等操作.
* statusCode=DWZ.statusCode.error表示操作失败,提示错误原因.
*statusCode=DWZ.statusCode.timeout表示session超时,下次点击时跳转到DWZ.loginUrl
* {"statusCode":"200","message":"操作成功","navTabId":"navNewsLi","forwardUrl":"","callbackType":"closeCurrent"}
* {"statusCode":"300","message":"操作失败"}
* {"statusCode":"301","message":"会话超时"}
*
* @author <ahref="mailto:tcl_6688@163.com">tch</a>
* Version 1.0.0
* @since 2013-12-8 下午6:46:53
*/ publicclass AjaxObject {
//状态码
publicfinal static int STATUS_CODE_SUCCESS = 200;
publicfinal static int STATUS_CODE_FAILURE = 300;
publicfinal static int STATUS_CODE_TIMEOUT = 301;
publicfinal static int STATUS_CODE_FORBIDDEN = 403; //callbackType类型
publicfinal static String CALLBACK_TYPE_CLOSE_CURRENT = "closeCurrent";
publicfinal static String CALLBACK_TYPE_FORWARD = "forward"; privateint statusCode = STATUS_CODE_SUCCESS;
privateString message = "";
privateString navTabId = "";
privateString forwardUrl = "";
privateString rel = "";
privateString callbackType = CALLBACK_TYPE_CLOSE_CURRENT; publicAjaxObject() { } publicAjaxObject(String message) {
this.message= message;
} /**
* 构造函数
* @param statusCode
*/
publicAjaxObject(int statusCode) {
super();
this.statusCode= statusCode;
} /**
* 构造函数
* @param statusCode
* @param message
*/
publicAjaxObject(int statusCode, String message) {
super();
this.statusCode= statusCode;
this.message= message;
} /**
* 构造函数
* @param statusCode
* @param message
* @param callbackType
*/
publicAjaxObject(int statusCode, String message, String callbackType) {
this.statusCode= statusCode;
this.message= message;
this.callbackType= callbackType;
} /**
* 构造函数
* @param statusCode
* @param message
* @param forwardUrl
* @param rel
* @param callbackType
*/
publicAjaxObject(int statusCode, String message, String navTabId, String forwardUrl,
Stringrel, String callbackType) {
this.statusCode= statusCode;
this.message= message;
this.navTabId= navTabId;
this.forwardUrl= forwardUrl;
this.rel= rel;
this.callbackType= callbackType;
} /**
* 返回 statusCode 的值
* @return statusCode
*/
publicint getStatusCode() {
returnstatusCode;
} /**
* 设置 statusCode 的值
* @param statusCode
*/
publicAjaxObject setStatusCode(int statusCode) {
this.statusCode= statusCode;
returnthis;
} /**
* 返回 message 的值
* @return message
*/
publicString getMessage() {
returnmessage;
} /**
* 设置 message 的值
* @param message
*/
publicAjaxObject setMessage(String message) {
this.message= message;
returnthis;
} /**
* 返回 forwardUrl 的值
* @return forwardUrl
*/
publicString getForwardUrl() {
returnforwardUrl;
} /**
* 设置 forwardUrl 的值
* @param forwardUrl
*/
publicAjaxObject setForwardUrl(String forwardUrl) {
this.forwardUrl= forwardUrl;
returnthis;
} /**
* 返回 rel 的值
* @return rel
*/
publicString getRel() {
returnrel;
} /**
* 设置 rel 的值
* @param rel
*/
publicAjaxObject setRel(String rel) {
this.rel= rel;
returnthis;
} /**
* 返回 callbackType 的值
* @return callbackType
*/
publicString getCallbackType() {
returncallbackType;
} /**
* 设置 callbackType 的值
* @param callbackType
*/
publicAjaxObject setCallbackType(String callbackType) {
this.callbackType= callbackType;
returnthis;
} /**
* 返回 navTabId 的值
* @return navTabId
*/
publicString getNavTabId() {
returnnavTabId;
} /**
* 设置 navTabId 的值
* @param navTabId
*/
publicAjaxObject setNavTabId(String navTabId) {
this.navTabId= navTabId;
returnthis;
} publicstatic AjaxObject newOk(String message) {
returnnew AjaxObject(STATUS_CODE_SUCCESS, message);
} publicstatic AjaxObject newError(String message) {
returnnew AjaxObject(STATUS_CODE_FAILURE, message);
} publicstatic AjaxObject newTimeout(String message) {
returnnew AjaxObject(STATUS_CODE_TIMEOUT, message);
} publicstatic AjaxObject newForbidden(String message) {
returnnew AjaxObject(STATUS_CODE_TIMEOUT, message);
} publicstatic AjaxObject newRefreshNavtab(String navTabId, String message) {
AjaxObjectajaxObject = new AjaxObject(message);
ajaxObject.navTabId= navTabId;
returnajaxObject;
} publicstatic AjaxObject newRefreshRel(String rel, String message) {
AjaxObjectajaxObject = new AjaxObject(message);
ajaxObject.rel= rel;
returnajaxObject;
} publicstatic AjaxObject newForward(String forwardUrl) {
AjaxObjectajaxObject = new AjaxObject(CALLBACK_TYPE_FORWARD);
ajaxObject.forwardUrl= forwardUrl;
returnajaxObject;
} /**
* 转换成JSONObject,以便传到客户端显示
* @return
* @see java.lang.Object#toString()
*/
@Override
publicString toString() {
StringBufferbuffer = new StringBuffer();
buffer.append("{")
.append("\"statusCode\":\"" + statusCode +"\",")
.append("\"message\":\"" + message +"\",")
.append("\"navTabId\":\"" + navTabId +"\",")
.append("\"rel\":\""+ rel + "\",")
.append("\"callbackType\":\"" + callbackType +"\",")
.append("\"forwardUrl\":\"" + forwardUrl +"\"")
.append("}");
returnbuffer.toString();
} }

重点

通过AjaxObject的toString方法,将信息转换成JSONObject,返回到客户端显示

使用时,在Service中抛出异常,在Action中捕获异常

userService.java

public void addUser(User user) throws Exception {

//测试异常
if("tch".equals(user.getName())) {
thrownew Exception("已经存在该用户!");
}

userAction.java

publicvoid userSave(){
Stringmsg; try{
userDao.saveorupdate(user);
msg= AjaxObject.newOk("添加用户成功啦!").toString();
}catch (Exception e) {
msg= AjaxObject.newError(e.getMessage()).setCallbackType("").toString();
} //将处理信息发送到客户端
HttpServletResponseresponse=ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
try{
PrintWriterout=response.getWriter();
out.print(msg);
out.close();
}catch (IOException e) {
e.printStackTrace();
}
}

效果图

DWZ (JUI) 教程(二):处理信息回馈的通用规范的更多相关文章

  1. DWZ (JUI) 教程 tree 控件的选中事件

    DWZ (JUI) 教程 tree 控件的选中事件 先简单说一下流程 第一步 当然是先定义好回调事件了 function checkCallback(json){ ........... ...... ...

  2. DWZ(JUI) 教程 左侧栏默认是关闭状态的问题

    DWZ(JUI) 教程 左侧栏默认是关闭状态的问题,初始化是全屏状态,只需简单处理就可以了 $(function(){ DWZ.init("dwz.frag.xml", { log ...

  3. DWZ (JUI) 教程 国际化问题(多语言/语言切换)

    DWZ 国际化也是比较简单的,网站的内容国际化和常规的项目国际化是一样的,不要做出特殊的调整. DWZ 自身框架的国际化,比如 翻页的上一页下一页等信息.这些信息都是在dwz.frag.xml 文件当 ...

  4. DWZ (JUI) 教程 DWZ中dialog层的刷新

    在DWZ开发过程中经常会遇到的一种情况就是:在navTab页面中通过a标签打开一个dialog,在dialog层进行操作后,需要对该dialog层进行必要的刷新操作. 1.首先讲一下思路: 在非dia ...

  5. DWZ (JUI) 教程 navTab 刷新分析

    navTab的刷新在doc文件里也有说明 首先 在form表单里指定好回调函数 * <form action="/user.do?method=save" onsubmit= ...

  6. DWZ (JUI) 教程 table 排序

    dwz排序是后台排序,不是前台的js排序,他的流程和搜索,分页是一样的,当你点击排序的按钮时,从新发送请求刷新当前的navTable 和 dialog. <th width="60&q ...

  7. DWZ (JUI) 教程 根据ID刷新 dialog

    reloadDialog:function(dialogId){ var dialog = $("body").data(dialogId); if(dialog){ $.pdia ...

  8. DWZ(JUI) 教程 中如何整合第三方jQuery插件

    Query插件一般是$(document).ready()中初始化 $(document).ready(function(){  // 文档就绪,初始化jQuery插件| });  // 或者或缩写形 ...

  9. DWZ(JUI) 教程 普通表单提交

    一类是普通的表单提交,另一类就是列表页面的表单提交,主要是用来查询搜索列表使用的.今天我就简单介绍一下前者. 这是官网上的普通列表页面, <div class="pageContent ...

随机推荐

  1. CentOS 6 用SVN自动提交文件到web服务器

    关于 svn 的安装 参考:[转]Linux(centOS6.5)下SVN的安装.配置及开机启动 经过两天的各种尝试总算解决了,总结如下: 1.在建立库时注意 要让库的名称和  要同步的 web目录名 ...

  2. vhost文件设置

    #例子<VirtualHost *.82> #设置端口号为82 ServerName localhost #服务器名称 DocumentRoot "d:/Web" #文 ...

  3. php 解析url 和parse_url使用

    通过url进行传值,是php中一个传值的重要手段.所以我们要经常对url里面所带的参数进行解析,如果我们知道了url传递参数名称,例如 /index.php?name=tank&sex=1#t ...

  4. 对base-adapter-helper的简单分析

    在微博上看到了这篇Android ListView适配器应该这样写,受益匪浅. 于是依据文章结尾的介绍来到了base-adapter-helper的github,地址:https://github.c ...

  5. 利用httpclient和多线程刷訪问量代码

    缘起于玩唱吧,由于唱吧好友少,訪问量低,又不想加什么亲友团之类的,主要是太麻烦了,于是我就琢磨唱吧的訪问机制,准备用java的httpclient库来进行刷訪问量,想到动态IP反复使用就想到了用多线程 ...

  6. 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码

    ffmpeg开源库,实现将bmp格式的图片编码成x264文件,并将编码好的H264文件解码保存为BMP文件. 实现将视频文件yuv格式保存的图片格式的測试,图像格式png,jpg, gif等等測试均O ...

  7. InheritableThreadLocal

    InheritableThreadLocal继承自ThreadLocal,但比ThreadLocal多一个特性: 子线程可以继承父亲线程上下文中的信息 但是,有两个点需要注意的: 只有子线程创建之前的 ...

  8. CentOS6.5安全策略设置

    应公司内部网站等级测评的需求,正逐渐加强系统安全防护 密码策略设置 检查方法: 使用命令 #cat /etc/login.defs|grep PASS查看密码策略设置 备份方法: cp -p /etc ...

  9. CentOS6.5+php5.3听云安装过程

    听云安装过程请参考听云安装指导页面:http://doc.tingyun.com/help/html/doc/server_novice.html 根据自己的服务器系统和语言包下载对应的 安装包 安装 ...

  10. 11-UIKit(Storyboard、View的基本概念、绘制图形、UIBezierPath)

    目录: 1. Storyboard 2. Views 3. View的基本概念介绍 4. 绘制图形 5. UIBezierPath 回到顶部 1. Storyboard 1.1 静态表视图 1)Sec ...