1 25 package org.ofbiz.webapp.ftl; 26 27 import java.io.IOException ; 28 import java.io.Reader ; 29 import java.io.Writer ; 30 import java.util.HashMap ; 31 import java.util.Map ; 32 import javax.servlet.http.HttpServletRequest ; 33 import javax.servlet.http.HttpServletResponse ; 34 35 import freemarker.ext.beans.BeansWrapper; 36 import freemarker.template.SimpleHash; 37 import freemarker.template.Template; 38 import freemarker.template.WrappingTemplateModel; 39 40 import org.ofbiz.base.util.Debug; 41 import org.ofbiz.base.util.UtilHttp; 42 43 import org.jpublish.JPublishContext; 44 import org.jpublish.Page; 45 import org.jpublish.SiteContext; 46 import org.jpublish.page.PageInstance; 47 import org.jpublish.view.ViewRenderException; 48 49 57 public class FreeMarkerViewRenderer extends org.jpublish.view.freemarker.FreeMarkerViewRenderer { 58 59 public static final String module = FreeMarkerViewRenderer.class.getName(); 60 61 public void init() throws Exception { 62 super.init(); 63 String id = "unknown"; 65 fmConfig.setCacheStorage(new OfbizCacheStorage(id)); 66 fmConfig.setSetting("datetime_format", "yyyy-MM-dd HH:mm:ss.SSS"); 67 } 68 69 protected Object createViewContext(JPublishContext context, String path) throws ViewRenderException { 70 HttpServletRequest request = context.getRequest(); 71 HttpServletResponse response = context.getResponse(); 72 73 BeansWrapper wrapper = BeansWrapper.getDefaultInstance(); 74 WrappingTemplateModel.setDefaultObjectWrapper(wrapper); 75 Map contextMap = new HashMap (); 76 SimpleHash root = new SimpleHash(wrapper); 77 try { 78 Object [] keys = context.getKeys(); 79 for (int i = 0; i < keys.length; i++) { 80 String key = (String ) keys[i]; 81 Object value = context.get(key); 82 if (value != null) { 83 contextMap.put(key, value); 84 root.put(key, value); 87 } 88 } 89 root.put("context", wrapper.wrap(contextMap)); 90 root.put("cachedInclude", new JpCacheIncludeTransform()); FreeMarkerViewHandler.prepOfbizRoot(root, request, response); 93 } catch (Exception e) { 94 throw new ViewRenderException(e); 95 } 96 return root; 97 } 98 99 public void render(JPublishContext context, String path, Reader in, Writer out) throws IOException , ViewRenderException { 100 try { 101 Page page = (Page) context.get(JPublishContext.JPUBLISH_PAGE); 102 Object viewContext = createViewContext(context, path); 103 104 Template template = fmConfig.getTemplate(path, UtilHttp.getLocale(context.getRequest())); 105 template.setObjectWrapper(BeansWrapper.getDefaultInstance()); 106 107 115 116 template.process(viewContext, out); 117 118 123 } catch (IOException e) { 124 throw e; 125 } catch (Exception e) { 126 Debug.logError(e, "Exception from FreeMarker", module); 127 throw new ViewRenderException(e); 128 } 129 } 130 131 private Page getPage(String path, JPublishContext context) { 132 Page page = null; 133 try { 134 SiteContext siteContext = (SiteContext) context.get("site"); 135 PageInstance pi = siteContext.getPageManager().getPage(path.substring(path.lastIndexOf(":") + 1)); 136 if (pi != null) 137 page = new Page(pi); 138 } catch (Exception e) { 139 } 140 return page; 141 } 142 143 } 144 | Popular Tags |