DWZ (JUI) 應用實例(二):處理信息回饋的通用規範

在開發過程中,抽象成模型,定義規範是非常有必要的,不僅可以簡化代碼,提高開發效率,也爲自己減少了不少麻煩。

在開發中,因爲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:[email protected]">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);
outMsg(AjaxObject.newOk("添加用戶成功啦!").setNavTabId("userListview").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();
}
}

 

效果圖


 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章