1 25 package org.ofbiz.webapp.ftl; 26 27 import java.io.File ; 28 import java.io.IOException ; 29 import java.util.HashMap ; 30 import java.util.Map ; 31 32 import javax.servlet.ServletContext ; 33 import javax.servlet.http.HttpServletRequest ; 34 import javax.servlet.http.HttpServletResponse ; 35 import javax.servlet.http.HttpSession ; 36 37 import org.jpublish.view.freemarker.JPublishTemplateLoader; 38 import org.ofbiz.base.util.UtilHttp; 39 import org.ofbiz.base.util.template.FreeMarkerWorker; 40 import org.ofbiz.webapp.view.ViewHandler; 41 import org.ofbiz.webapp.view.ViewHandlerException; 42 43 import freemarker.ext.beans.BeansWrapper; 44 import freemarker.ext.jsp.TaglibFactory; 45 import freemarker.ext.servlet.HttpRequestHashModel; 46 import freemarker.ext.servlet.HttpSessionHashModel; 47 import freemarker.template.Configuration; 48 import freemarker.template.SimpleHash; 49 import freemarker.template.Template; 50 import freemarker.template.TemplateException; 51 import freemarker.template.WrappingTemplateModel; 52 53 54 61 public class FreeMarkerViewHandler implements ViewHandler { 62 63 public static final String module = FreeMarkerViewHandler.class.getName(); 64 65 protected ServletContext servletContext = null; 66 protected Configuration config = null; 67 68 public void init(ServletContext context) throws ViewHandlerException { 69 this.servletContext = context; 70 71 config = new freemarker.template.Configuration(); 72 73 JPublishTemplateLoader templateLoader = new JPublishTemplateLoader(); 74 config.setTemplateLoader(templateLoader); 76 config.setLocalizedLookup(false); 77 78 try { 80 config.setDirectoryForTemplateLoading(new File (context.getRealPath("/"))); 81 } catch (java.io.IOException e) { 82 throw new ViewHandlerException("Could not create file for webapp root path", e); 83 } 84 WrappingTemplateModel.setDefaultObjectWrapper(BeansWrapper.getDefaultInstance()); 85 try { 86 config.setObjectWrapper(BeansWrapper.getDefaultInstance()); 87 config.setCacheStorage(new OfbizCacheStorage("unknown")); 88 config.setSetting("datetime_format", "yyyy-MM-dd HH:mm:ss.SSS"); 89 } catch (TemplateException e) { 90 throw new ViewHandlerException("Freemarker TemplateException", e.getCause()); 91 } 92 } 93 94 public void render(String name, String page, String info, String contentType, String encoding, 95 HttpServletRequest request, HttpServletResponse response) throws ViewHandlerException { 96 if (page == null || page.length() == 0) 97 throw new ViewHandlerException("Invalid template source"); 98 99 SimpleHash root = new SimpleHash(BeansWrapper.getDefaultInstance()); 101 prepOfbizRoot(root, request, response); 102 103 Template template = null; 105 try { 106 template = config.getTemplate(page, UtilHttp.getLocale(request)); 107 } catch (IOException e) { 108 throw new ViewHandlerException("Cannot open template file: " + page, e); 109 } 110 template.setObjectWrapper(BeansWrapper.getDefaultInstance()); 111 112 try { 114 template.process(root, response.getWriter(), BeansWrapper.getDefaultInstance()); 115 response.flushBuffer(); 116 } catch (TemplateException te) { 117 throw new ViewHandlerException("Problems processing Freemarker template", te); 118 } catch (IOException ie) { 119 throw new ViewHandlerException("Problems writing to output stream", ie); 120 } 121 } 122 123 public static void prepOfbizRoot(SimpleHash root, HttpServletRequest request, HttpServletResponse response) { 124 Map rootPrep = new HashMap (); 125 prepOfbizRoot(rootPrep, request, response); 126 root.putAll(rootPrep); 127 } 128 129 public static void prepOfbizRoot(Map root, HttpServletRequest request, HttpServletResponse response) { 130 ServletContext servletContext = (ServletContext ) request.getAttribute("servletContext"); 131 HttpSession session = request.getSession(); 132 133 BeansWrapper wrapper = BeansWrapper.getDefaultInstance(); 134 135 root.put("delegator", request.getAttribute("delegator")); 137 root.put("dispatcher", request.getAttribute("dispatcher")); 138 root.put("security", request.getAttribute("security")); 139 root.put("userLogin", session.getAttribute("userLogin")); 140 141 root.put("response", response); 143 144 root.put("application", servletContext); 146 147 150 root.put("session", session); 152 153 root.put("sessionAttributes", new HttpSessionHashModel(session, wrapper)); 155 156 root.put("request", request); 158 159 root.put("requestAttributes", new HttpRequestHashModel(request, wrapper)); 161 162 Map requestParameters = UtilHttp.getParameterMap(request); 164 root.put("requestParameters", requestParameters); 165 166 TaglibFactory JspTaglibs = new TaglibFactory(servletContext); 168 root.put("JspTaglibs", JspTaglibs); 169 170 FreeMarkerWorker.addAllOfbizTransforms(root); 171 } 172 } 173 | Popular Tags |