001
014
015 package com.liferay.util.freemarker;
016
017 import com.liferay.portal.kernel.servlet.JSPSupportServlet;
018 import com.liferay.portal.kernel.servlet.ServletContextPool;
019 import com.liferay.portal.kernel.template.Template;
020 import com.liferay.portal.kernel.template.TemplateConstants;
021 import com.liferay.portal.kernel.template.TemplateTaglibSupportProvider;
022 import com.liferay.portal.util.PortalUtil;
023
024 import freemarker.ext.servlet.HttpRequestHashModel;
025 import freemarker.ext.servlet.ServletContextHashModel;
026
027 import freemarker.template.ObjectWrapper;
028 import freemarker.template.TemplateHashModel;
029
030 import javax.portlet.PortletRequest;
031 import javax.portlet.PortletResponse;
032
033 import javax.servlet.GenericServlet;
034 import javax.servlet.ServletContext;
035 import javax.servlet.http.HttpServletRequest;
036 import javax.servlet.http.HttpServletRequestWrapper;
037 import javax.servlet.http.HttpServletResponseWrapper;
038
039
042 public class FreeMarkerTemplateTaglibSupportProvider
043 implements TemplateTaglibSupportProvider {
044
045 @Override
046 public void addTaglibSupport(
047 Template template, String servletContextName,
048 PortletRequest portletRequest, PortletResponse portletResponse)
049 throws Exception {
050
051 HttpServletRequest request = PortalUtil.getHttpServletRequest(
052 portletRequest);
053
054 template.prepare(request);
055
056 template.put(
057 "fullTemplatesPath", servletContextName.concat(
058 TemplateConstants.SERVLET_SEPARATOR));
059
060 ServletContext servletContext = ServletContextPool.get(
061 servletContextName);
062
063 GenericServlet genericServlet = new JSPSupportServlet(servletContext);
064
065 ServletContextHashModel servletContextHashModel =
066 new ServletContextHashModel(
067 genericServlet, ObjectWrapper.DEFAULT_WRAPPER);
068
069 template.put("Application", servletContextHashModel);
070
071 TemplateHashModel taglibsFactory =
072 FreeMarkerTaglibFactoryUtil.createTaglibFactory(servletContext);
073
074 template.put("PortletJspTagLibs", taglibsFactory);
075
076 HttpServletRequestWrapper httpServletRequestWrapper =
077 new HttpServletRequestWrapper(
078 PortalUtil.getHttpServletRequest(portletRequest));
079 HttpServletResponseWrapper httpServletResponseWrapper =
080 new HttpServletResponseWrapper(
081 PortalUtil.getHttpServletResponse(portletResponse));
082
083 HttpRequestHashModel httpRequestHashModel =
084 new HttpRequestHashModel(
085 httpServletRequestWrapper, httpServletResponseWrapper,
086 ObjectWrapper.DEFAULT_WRAPPER);
087
088 template.put("Request", httpRequestHashModel);
089 }
090
091 }