You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mu...@apache.org on 2010/01/15 20:16:09 UTC
svn commit: r899763 - in /struts/struts2/trunk:
core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java
plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreemarkerDecoratorServlet.java
Author: musachy
Date: Fri Jan 15 19:16:09 2010
New Revision: 899763
URL: http://svn.apache.org/viewvc?rev=899763&view=rev
Log:
WW-3329 ${Parameters.xxx} in freemarker view is broken
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java
struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreemarkerDecoratorServlet.java
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java?rev=899763&r1=899762&r2=899763&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java Fri Jan 15 19:16:09 2010
@@ -99,11 +99,11 @@
public class FreemarkerManager {
// coppied from freemarker servlet - so that there is no dependency on it
- private static final String INITPARAM_TEMPLATE_PATH = "TemplatePath";
- private static final String INITPARAM_NOCACHE = "NoCache";
- private static final String INITPARAM_CONTENT_TYPE = "ContentType";
- private static final String DEFAULT_CONTENT_TYPE = "text/html";
- private static final String INITPARAM_DEBUG = "Debug";
+ public static final String INITPARAM_TEMPLATE_PATH = "TemplatePath";
+ public static final String INITPARAM_NOCACHE = "NoCache";
+ public static final String INITPARAM_CONTENT_TYPE = "ContentType";
+ public static final String DEFAULT_CONTENT_TYPE = "text/html";
+ public static final String INITPARAM_DEBUG = "Debug";
public static final String KEY_REQUEST = "Request";
public static final String KEY_INCLUDE = "include_page";
@@ -115,16 +115,21 @@
public static final String KEY_JSP_TAGLIBS = "JspTaglibs";
// Note these names start with dot, so they're essentially invisible from a freemarker script.
- public static final String ATTR_TEMPLATE_MODEL = ".freemarker.TemplateModel"; // template model stored in request for siteMesh
private static final String ATTR_REQUEST_MODEL = ".freemarker.Request";
private static final String ATTR_REQUEST_PARAMETERS_MODEL = ".freemarker.RequestParameters";
private static final String ATTR_SESSION_MODEL = ".freemarker.Session";
private static final String ATTR_APPLICATION_MODEL = ".freemarker.Application";
private static final String ATTR_JSP_TAGLIBS_MODEL = ".freemarker.JspTaglibs";
+ // for sitemesh
+ public static final String ATTR_TEMPLATE_MODEL = ".freemarker.TemplateModel"; // template model stored in request for siteMesh
+
+ // for Struts
+ public static final String KEY_REQUEST_PARAMETERS_STRUTS = "Parameters";
+
public static final String KEY_HASHMODEL_PRIVATE = "__FreeMarkerManager.Request__";
- private static final String EXPIRATION_DATE;
+ public static final String EXPIRATION_DATE;
/**
* Adds individual settings.
@@ -305,32 +310,36 @@
protected ScopesHashModel buildScopesHashModel(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response, ObjectWrapper wrapper, ValueStack stack) {
ScopesHashModel model = new ScopesHashModel(wrapper, servletContext, request, stack);
- // Create hash model wrapper for servlet context (the application)
- // only need one thread to do this once, per servlet context
+ // Create hash model wrapper for servlet context (the application). We need one thread, once per servlet context
synchronized (servletContext) {
ServletContextHashModel servletContextModel = (ServletContextHashModel) servletContext.getAttribute(ATTR_APPLICATION_MODEL);
-
if (servletContextModel == null) {
-
+ // first try a JSP support servlet. If it fails, default to the servlet.
GenericServlet servlet = JspSupportServlet.jspSupportServlet;
- // TODO if the jsp support servlet isn't load-on-startup then it won't exist
- // if it hasn't been accessed, and a JSP page is accessed
if (servlet != null) {
servletContextModel = new ServletContextHashModel(servlet, wrapper);
servletContext.setAttribute(ATTR_APPLICATION_MODEL, servletContextModel);
- TaglibFactory taglibs = new TaglibFactory(servletContext);
- servletContext.setAttribute(ATTR_JSP_TAGLIBS_MODEL, taglibs);
+ } else {
+ servletContextModel = new ServletContextHashModel(servletContext, wrapper);
+ servletContext.setAttribute(ATTR_APPLICATION_MODEL, servletContextModel);
}
-
+ TaglibFactory taglibs = new TaglibFactory(servletContext);
+ servletContext.setAttribute(ATTR_JSP_TAGLIBS_MODEL, taglibs);
}
-
model.put(KEY_APPLICATION, servletContextModel);
- model.put(KEY_JSP_TAGLIBS, (TemplateModel) servletContext.getAttribute(ATTR_JSP_TAGLIBS_MODEL));
+ model.putUnlistedModel(KEY_APPLICATION_PRIVATE, servletContextModel);
}
+ model.put(KEY_JSP_TAGLIBS, (TemplateModel) servletContext.getAttribute(ATTR_JSP_TAGLIBS_MODEL));
// Create hash model wrapper for session
HttpSession session = request.getSession(false);
+ HttpSessionHashModel sessionModel;
if (session != null) {
+ sessionModel = (HttpSessionHashModel) session.getAttribute(ATTR_SESSION_MODEL);
+ if (sessionModel == null) {
+ sessionModel = new HttpSessionHashModel(session, wrapper);
+ session.setAttribute(ATTR_SESSION_MODEL, sessionModel);
+ }
model.put(KEY_SESSION, new HttpSessionHashModel(session, wrapper));
} else {
// no session means no attributes ???
@@ -355,6 +364,7 @@
request.setAttribute(ATTR_REQUEST_PARAMETERS_MODEL, reqParametersModel);
}
model.put(ATTR_REQUEST_PARAMETERS_MODEL, reqParametersModel);
+ model.put(KEY_REQUEST_PARAMETERS_STRUTS,reqParametersModel);
return model;
}
Modified: struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreemarkerDecoratorServlet.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreemarkerDecoratorServlet.java?rev=899763&r1=899762&r2=899763&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreemarkerDecoratorServlet.java (original)
+++ struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreemarkerDecoratorServlet.java Fri Jan 15 19:16:09 2010
@@ -66,26 +66,8 @@
public static final long serialVersionUID = -2440216393145762479L;
- private static final String INITPARAM_TEMPLATE_PATH = "TemplatePath";
-
- public static final String KEY_REQUEST = "Request";
- public static final String KEY_INCLUDE = "include_page";
- public static final String KEY_REQUEST_PRIVATE = "__FreeMarkerServlet.Request__";
- public static final String KEY_REQUEST_PARAMETERS = "RequestParameters";
- public static final String KEY_SESSION = "Session";
- public static final String KEY_APPLICATION = "Application";
- public static final String KEY_APPLICATION_PRIVATE = "__FreeMarkerServlet.Application__";
- public static final String KEY_JSP_TAGLIBS = "JspTaglibs";
-
- private static final String ATTR_REQUEST_PARAMETERS_MODEL = "Parameters";
-
- // Note these names start with dot, so they're essentially invisible from
- // a freemarker script.
- private static final String ATTR_REQUEST_MODEL = ".freemarker.Request";
- private static final String ATTR_SESSION_MODEL = ".freemarker.Session";
- private static final String ATTR_APPLICATION_MODEL = ".freemarker.Application";
- private static final String ATTR_JSP_TAGLIBS_MODEL = ".freemarker.JspTaglibs";
+/*
private static final String EXPIRATION_DATE;
static {
@@ -95,7 +77,7 @@
SimpleDateFormat httpDate = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", java.util.Locale.US);
EXPIRATION_DATE = httpDate.format(expiration.getTime());
}
-
+*/
protected String templatePath;
protected boolean nocache;
protected boolean debug;
@@ -132,7 +114,7 @@
}
// template path is already handled!
- if (!INITPARAM_TEMPLATE_PATH.equals(name)) freemarkerManager.addSetting(name, value);
+ if (!FreemarkerManager.INITPARAM_TEMPLATE_PATH.equals(name)) freemarkerManager.addSetting(name, value);
}
nocache = freemarkerManager.getNocache();
debug = freemarkerManager.getDebug();
@@ -195,8 +177,6 @@
model = freemarkerManager.buildTemplateModel(ctx.getValueStack(), ctx.getActionInvocation().getAction(), servletContext, request, response, wrapper);
}
- populateModel(model, wrapper, servletContext, request, response);
-
// Give subclasses a chance to hook into preprocessing
if (preTemplateProcess(request, response, template, model)) {
try {
@@ -352,58 +332,7 @@
// HTTP/1.0
res.setHeader("Pragma", "no-cache");
// Last resort for those that ignore all of the above
- res.setHeader("Expires", EXPIRATION_DATE);
- }
- }
-
- protected ScopesHashModel populateModel(ScopesHashModel params, ObjectWrapper wrapper, ServletContext servletContext, final HttpServletRequest request, final HttpServletResponse response) throws TemplateModelException {
- try {
- // Create hash model wrapper for servlet context (the application)
- ServletContextHashModel servletContextModel = (ServletContextHashModel) servletContext.getAttribute(ATTR_APPLICATION_MODEL);
- if (servletContextModel == null) {
- servletContextModel = new ServletContextHashModel(this, wrapper);
- servletContext.setAttribute(ATTR_APPLICATION_MODEL, servletContextModel);
- TaglibFactory taglibs = new TaglibFactory(servletContext);
- servletContext.setAttribute(ATTR_JSP_TAGLIBS_MODEL, taglibs);
- initializeServletContext(request, response);
- }
- params.putUnlistedModel(KEY_APPLICATION, servletContextModel);
- params.putUnlistedModel(KEY_APPLICATION_PRIVATE, servletContextModel);
- params.putUnlistedModel(KEY_JSP_TAGLIBS, (TemplateModel) servletContext.getAttribute(ATTR_JSP_TAGLIBS_MODEL));
- // Create hash model wrapper for session
- HttpSessionHashModel sessionModel;
- HttpSession session = request.getSession(false);
- if (session != null) {
- sessionModel = (HttpSessionHashModel) session.getAttribute(ATTR_SESSION_MODEL);
- if (sessionModel == null) {
- sessionModel = new HttpSessionHashModel(session, wrapper);
- session.setAttribute(ATTR_SESSION_MODEL, sessionModel);
- initializeSession(request, response);
- }
- } else {
- sessionModel = new HttpSessionHashModel(this, request, response, wrapper);
- }
- params.putUnlistedModel(KEY_SESSION, sessionModel);
-
- // Create hash model wrapper for request
- HttpRequestHashModel requestModel = (HttpRequestHashModel) request.getAttribute(ATTR_REQUEST_MODEL);
- if (requestModel == null || requestModel.getRequest() != request) {
- requestModel = new HttpRequestHashModel(request, response, wrapper);
- request.setAttribute(ATTR_REQUEST_MODEL, requestModel);
- request.setAttribute(ATTR_REQUEST_PARAMETERS_MODEL, createRequestParametersHashModel(request));
- }
- params.putUnlistedModel(KEY_REQUEST, requestModel);
- params.putUnlistedModel(KEY_INCLUDE, new IncludePage(request, response));
- params.putUnlistedModel(KEY_REQUEST_PRIVATE, requestModel);
-
- // Create hash model wrapper for request parameters
- HttpRequestParametersHashModel requestParametersModel = (HttpRequestParametersHashModel) request.getAttribute(ATTR_REQUEST_PARAMETERS_MODEL);
- params.putUnlistedModel(KEY_REQUEST_PARAMETERS, requestParametersModel);
- return params;
- } catch (ServletException e) {
- throw new TemplateModelException(e);
- } catch (IOException e) {
- throw new TemplateModelException(e);
+ res.setHeader("Expires", freemarkerManager.EXPIRATION_DATE);
}
}
}