最近使用jfinal框架和dwz前端框架做一个后台管理的系统。
首先,不得不说jfinal和dwz都是很优秀的框架,在实际的开发中提供了不少的便利,向作者们致敬,以后会更深入框架代码进行学习!
这两个框架上手着实很快,看了demo和教程文档基本就可以开始进行开发。然而,水平有限,前期写了不少不合理的代码,几天在做后期的一些调整。例如如下的json数据渲染的问题...
dwz Ajax表单提交后服务器端需要返回以下的json代码:
{ "statusCode":"200", "message":"操作成功", "navTabId":"", "rel":"", "callbackType":"closeCurrent", "forwardUrl":""}
开始时,在controller的方法中,直接使用renderJson(String jsonText)将json直接以字符串的形式写入,所以每一处需要渲染json的地方代码如下般冗长不堪:
renderJson("{\"statusCode\":\"200\",\"message\":\"保存成功!\",\"navTabId\":\"navTabId\",\"rel\":\"\",\"callbackType\":\"closeCurrent\",\"forwardUrl\":\"\",\"confirmMsg\":\"\"}");
实际上,将这一部分进行封装,便可以“一劳永逸”,代码也会相对简洁好看些。
手写一个类继承Render类,根据实际情况写入数据域和方法,如下:
package com.car.admin.util;import java.io.IOException;import java.io.PrintWriter;import java.text.MessageFormat;import com.jfinal.render.Render;import com.jfinal.render.RenderException;@SuppressWarnings("serial")public class DwzRenderJson extends Render { private String statusCode = "200"; private String message = ""; private String navTabId = ""; private String callbackType = ""; private String forwardUrl = ""; private String rel=""; private String confirmMsg=""; public DwzRenderJson(String message, String navTabId, String callbackType) { this.message = message; this.navTabId = navTabId; this.callbackType = callbackType; } public DwzRenderJson() { } public static DwzRenderJson success() { DwzRenderJson dwzRenderJson = new DwzRenderJson(); dwzRenderJson.setMessage("操作成功"); return dwzRenderJson; } public static DwzRenderJson success(String successMsg) { DwzRenderJson dwzRenderJson = new DwzRenderJson(); dwzRenderJson.setMessage(successMsg); return dwzRenderJson; } public static DwzRenderJson success(String successMsg,String navTabId) { DwzRenderJson dwzRenderJson = new DwzRenderJson(); dwzRenderJson.setMessage(successMsg); dwzRenderJson.setNavTabId(navTabId); return dwzRenderJson; } public static DwzRenderJson error() { DwzRenderJson dwzRenderJson = new DwzRenderJson(); dwzRenderJson.statusCode = "300"; dwzRenderJson.message = "操作失败"; return dwzRenderJson; } public static DwzRenderJson error(String errorMsg) { DwzRenderJson dwzRenderJson = new DwzRenderJson(); dwzRenderJson.statusCode = "300"; dwzRenderJson.message = errorMsg; return dwzRenderJson; } public static Render refresh(String refreshNavTabId) { DwzRenderJson dwzRenderJson = new DwzRenderJson(); dwzRenderJson.navTabId = refreshNavTabId; return dwzRenderJson; } public static DwzRenderJson closeCurrentAndRefresh(String refreshNavTabId) { DwzRenderJson dwzRenderJson = new DwzRenderJson(); dwzRenderJson.navTabId = refreshNavTabId; dwzRenderJson.callbackType = "closeCurrent"; return dwzRenderJson; } public static DwzRenderJson closeCurrentAndFoward(String refreshNavTabId, String fowardUrl) { DwzRenderJson dwzRenderJson = new DwzRenderJson(); dwzRenderJson.navTabId = refreshNavTabId; dwzRenderJson.callbackType = "closeCurrent"; dwzRenderJson.forwardUrl = fowardUrl; return dwzRenderJson; } public static DwzRenderJson closeCurrentAndRefresh(String refreshNavTabId, String message) { DwzRenderJson dwzRenderJson = new DwzRenderJson(); dwzRenderJson.navTabId = refreshNavTabId; dwzRenderJson.message = message; dwzRenderJson.callbackType = "closeCurrent"; return dwzRenderJson; } @Override public void render() { PrintWriter writer = null; String dwz = "\"statusCode\":\"{0}\",\"message\":\"{1}\",\"navTabId\":\"{2}\",\"rel\":\"{3}\",\"callbackType\":\"{4}\",\"forwardUrl\":\"{5}\",\"confirmMsg\":\"{6}\""; dwz = "{\n" + MessageFormat.format(dwz, statusCode, message, navTabId, rel, callbackType, forwardUrl , confirmMsg) + "\n}"; System.out.println(dwz); try { System.out.println(dwz); response.setHeader("Pragma", "no-cache"); // HTTP/1.0 caches might not implement Cache-Control and might only implement Pragma: no-cache response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); response.setContentType("text/html;charset=" + getEncoding()); //response.setCharacterEncoding(super.getEncoding()); writer = response.getWriter(); writer.write(dwz); writer.flush(); } catch (IOException e) { throw new RenderException(e); } finally { writer.close(); } } public String getStatusCode() { return statusCode; } public void setStatusCode(String statusCode) { this.statusCode = statusCode; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String getNavTabId() { return navTabId; } public void setNavTabId(String navTabId) { this.navTabId = navTabId; } public String getCallbackType() { return callbackType; } public void setCallbackType(String callbackType) { this.callbackType = callbackType; } public String getForwardUrl() { return forwardUrl; } public void setForwardUrl(String forwardUrl) { this.forwardUrl = forwardUrl; } public String getRel() { return rel; } public void setRel(String rel) { this.rel = rel; } public String getConfirmMsg() { return confirmMsg; } public void setConfirmMsg(String confirmMsg) { this.confirmMsg = confirmMsg; }}
原来渲染json部分的代码便为如下:
render(DwzRenderJson.closeCurrentAndRefresh("storelist", "保存成功!"));
确实简短了不少,也达到了想要的效果。
水平实在有限,接触实际开发也不久,经验十分有限,难免要走一些弯路,但是,重要的还是要勤于思考动手、多多请教学习。