package org.nutz.mvc.view; import org.nutz.ioc.Ioc; import org.nutz.json.Json; import org.nutz.json.JsonFormat; import org.nutz.lang.Strings; import org.nutz.mvc.View; import org.nutz.mvc.ViewMaker; /** * 默认的的视图工厂类 * * @author zozoh(zozohtnt@gmail.com) * @author wendal(wendal1985@gmail.com) */ public class DefaultViewMaker implements ViewMaker { public static final String VIEW_JSP = "jsp"; public static final String VIEW_JSON = "json"; public static final String VIEW_REDIRECT = "redirect"; public static final String VIEW_REDIRECT2 = ">>"; public static final String VIEW_VOID = "void"; public static final String VIEW_IOC = "ioc"; public static final String VIEW_HTTP = "http"; public static final String VIEW_FORWARD = "forward"; public static final String VIEW_FORWARD2 = "->"; public static final String VIEW_RAW = "raw"; public View make(Ioc ioc, String type, String value) { type = type.toLowerCase(); if (VIEW_JSP.equals(type)) return new JspView(value); if (VIEW_JSON.equals(type)) if (Strings.isBlank(value)) return UTF8JsonView.COMPACT; else { // 除高级的json format定义之外,也支持简单的缩写 if (value.charAt(0) == '{') return new UTF8JsonView(Json.fromJson(JsonFormat.class, value)); else if ("nice".equals(value)) return UTF8JsonView.NICE; else if ("forlook".equals(value)) return UTF8JsonView.FORLOOK; else if ("full".equals(value)) return UTF8JsonView.FULL; else if ("compact".equals(value)) return UTF8JsonView.COMPACT; else throw new IllegalArgumentException("unkown json view format : " + value); } if (VIEW_REDIRECT.equals(type) || VIEW_REDIRECT2.equals(type)) return new ServerRedirectView(value); if (VIEW_FORWARD.equals(type) || VIEW_FORWARD2.equals(type)) return new ForwardView(value); if (VIEW_VOID.equals(type)) return new VoidView(); if (VIEW_IOC.equals(type)) return ioc.get(View.class, value); if (VIEW_HTTP.equals(type)) { return new HttpStatusView(Integer.parseInt(Strings.sBlank(value, "500"))); } if (VIEW_RAW.equals(type)) return new RawView(value); return null; } }