package com.gustz.dove.web.base.view; import java.util.Locale; import javax.servlet.ServletContext; import com.gustz.dove.web.base.view.tpl.Tpl; import com.gustz.dove.web.base.view.tpl.TplFactory; import com.gustz.dove.web.base.view.tpl.ViewHeadMeta; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.servlet.view.UrlBasedViewResolver; public class TplViewResolver extends UrlBasedViewResolver { private String resLibPath = ""; private String cache = "false"; private String viewPrefix = ""; @Autowired private ServletContext servletContext; private static ViewHeadMeta viewHeadMeta; private void setProperty() { if (this.getViewClass() == null) { this.setViewClass(TplView.class); } if (StringUtils.isBlank(getContentType())) { this.setContentType("text/html;charset=utf-8"); } if (StringUtils.isBlank(getPrefix())) { this.setPrefix("themes"); } if (StringUtils.isBlank(getSuffix())) { this.setSuffix(".html"); } if (StringUtils.isBlank(cache)) { cache = Boolean.FALSE.toString(); } super.setCache(Boolean.valueOf(cache)); if (StringUtils.isBlank(viewPrefix)) { this.setViewPrefix("views"); } if (StringUtils.isBlank(resLibPath)) { this.setResLibPath("/WEB-INF/views/resource-lib.html"); } } private static TplFactory createFactory(ServletContext servletContext, String prefix) { String realPath = servletContext.getRealPath("/"); String cxtPath = servletContext.getContextPath(); return new TplFactory(realPath, prefix, cxtPath, viewHeadMeta); } private TplFactory tf; private TplFactory getTemplateFactory() { if (tf == null) tf = createFactory(servletContext, getPrefix()); return tf; } @Override protected TplView createView(String viewName, Locale locale) throws Exception { this.setProperty(); // 1. String path = viewName + getSuffix(); Tpl tpl = getTemplateFactory().getTpl(path, resLibPath, viewPrefix, Boolean.valueOf(cache)); // 2. if (tpl == null) return null; TplView tplView = (TplView) super.createView(viewName, locale); tplView.setTpl(tpl); return tplView; } public void setResLibPath(String resLibPath) { this.resLibPath = resLibPath; } public void setCache(String cache) { this.cache = cache; } public void setViewPrefix(String viewPrefix) { this.viewPrefix = viewPrefix; } public void setViewHeadMeta(ViewHeadMeta viewHeadMeta) { TplViewResolver.viewHeadMeta = viewHeadMeta; } }