package org.nutz.mvc.view; import java.io.IOException; import java.io.Writer; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.nutz.json.JsonFormat; import org.nutz.mvc.Mvcs; import org.nutz.mvc.View; /** * 将数据采用json方式输出的试图实现 * * @author zozoh(zozohtnt@gmail.com) * @author mawn(ming300@gmail.com) * @author wendal(wendal1985@gmail.com) */ public class UTF8JsonView implements View { public static String CT = "application/json"; public static String JSONP_CT = "application/javascript"; protected JsonFormat format; protected Object data; protected boolean jsonp; protected String jsonpParam; public UTF8JsonView setData(Object data) { this.data = data; return this; } public UTF8JsonView setJsonp(boolean jsonp) { this.jsonp = jsonp; return this; } public UTF8JsonView setJsonpParam(String jsonpParam) { this.jsonpParam = jsonpParam; return this; } public UTF8JsonView(JsonFormat format) { this.format = format; } public UTF8JsonView() { this.format = new JsonFormat(false); } public void render(HttpServletRequest req, HttpServletResponse resp, Object obj) throws IOException { if (resp.getContentType() == null) if (jsonp) resp.setContentType(JSONP_CT); else resp.setContentType(CT); Writer writer = resp.getWriter(); if (jsonp) writer.write(req.getParameter(jsonpParam == null ? "callback" : jsonpParam) + "("); Mvcs.write(resp, writer, null == obj ? data : obj, format.clone()); if (jsonp) writer.write(");"); } public static final View NICE = new UTF8JsonView(JsonFormat.nice()); public static final View COMPACT = new UTF8JsonView(JsonFormat.compact()); public static final View FULL = new UTF8JsonView(JsonFormat.full()); public static final View FORLOOK = new UTF8JsonView(JsonFormat.forLook()); public static final View JSONP = new UTF8JsonView(JsonFormat.compact()).setJsonp(true); }