From 60b9d85d44826f7421ddaaa5870a7818e7f5fb41 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Wed, 25 Nov 2015 19:03:30 +0100 Subject: [PATCH] Adjusts usage of parameters --- .../apache/struts2/portlet/example/ExampleAction.java | 2 +- .../struts2/interceptor/DateTextFieldInterceptor.java | 7 ++++--- .../struts2/interceptor/MessageStoreInterceptor.java | 11 ++++------- .../apache/struts2/interceptor/ParameterAware.java | 4 +++- .../struts2/interceptor/ServletConfigInterceptor.java | 2 +- .../org/apache/struts2/validators/DWRValidator.java | 10 +++++----- .../src/main/java/org/apache/struts2/JSPRuntime.java | 9 ++++++--- .../struts2/portlet/dispatcher/Jsr168Dispatcher.java | 4 +++- 8 files changed, 27 insertions(+), 22 deletions(-) diff --git a/apps/portlet/src/main/java/org/apache/struts2/portlet/example/ExampleAction.java b/apps/portlet/src/main/java/org/apache/struts2/portlet/example/ExampleAction.java index d3e0741b2..e117c7fbe 100644 --- a/apps/portlet/src/main/java/org/apache/struts2/portlet/example/ExampleAction.java +++ b/apps/portlet/src/main/java/org/apache/struts2/portlet/example/ExampleAction.java @@ -34,6 +34,6 @@ public class ExampleAction extends ActionSupport { } public Map getRenderParameters() { - return ActionContext.getContext().getParameters(); + return ActionContext.getContext().getParameters().toMap(); } } diff --git a/core/src/main/java/org/apache/struts2/interceptor/DateTextFieldInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/DateTextFieldInterceptor.java index 049baf9af..c71cf4d94 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/DateTextFieldInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/DateTextFieldInterceptor.java @@ -70,7 +70,8 @@ public class DateTextFieldInterceptor implements Interceptor { DateWord[] dateWords = DateWord.getAll(); // Get all the values of date type - for (String name : parameters.getNames()) { + Set names = parameters.getNames(); + for (String name : names) { for (DateWord dateWord : dateWords) { String dateKey = "__" + dateWord.getDescription() + "_"; @@ -95,7 +96,7 @@ public class DateTextFieldInterceptor implements Interceptor { } // Create all the date objects - Map newParams = new HashMap<>(); + Map newParams = new HashMap<>(); Set>> dateEntries = dates.entrySet(); for (Entry> dateEntry : dateEntries) { Set> dateFormatEntries = dateEntry.getValue().entrySet(); @@ -109,7 +110,7 @@ public class DateTextFieldInterceptor implements Interceptor { SimpleDateFormat formatter = new SimpleDateFormat(dateFormat); formatter.setLenient(false); Date value = formatter.parse(dateValue); - newParams.put(dateEntry.getKey(), formatter.format(value)); + newParams.put(dateEntry.getKey(), value); } catch (ParseException e) { LOG.warn("Cannot parse the parameter '{}' with format '{}' and with value '{}'", dateEntry.getKey(), dateFormat, dateValue); } diff --git a/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java index 8ff2522cb..341615d81 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java @@ -27,6 +27,7 @@ import com.opensymphony.xwork2.interceptor.ValidationAware; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.struts2.dispatcher.HttpParameters; import org.apache.struts2.ServletActionContext; import org.apache.struts2.result.ServletRedirectResult; @@ -315,13 +316,9 @@ public class MessageStoreInterceptor extends AbstractInterceptor { protected String getRequestOperationMode(ActionInvocation invocation) { String reqOperationMode = NONE; if (allowRequestParameterSwitch) { - Map reqParams = (Map) invocation.getInvocationContext().get(ActionContext.PARAMETERS); - boolean containsParameter = reqParams.containsKey(requestParameterSwitch); - if (containsParameter) { - String[] reqParamsArr = (String[]) reqParams.get(requestParameterSwitch); - if (reqParamsArr != null && reqParamsArr.length > 0) { - reqOperationMode = reqParamsArr[0]; - } + HttpParameters reqParams = invocation.getInvocationContext().getParameters(); + if (reqParams.contains(requestParameterSwitch)) { + reqOperationMode = reqParams.get(requestParameterSwitch).getValue(); } } return reqOperationMode; diff --git a/core/src/main/java/org/apache/struts2/interceptor/ParameterAware.java b/core/src/main/java/org/apache/struts2/interceptor/ParameterAware.java index c440946aa..b37c0c601 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/ParameterAware.java +++ b/core/src/main/java/org/apache/struts2/interceptor/ParameterAware.java @@ -21,6 +21,8 @@ package org.apache.struts2.interceptor; +import org.apache.struts2.dispatcher.HttpParameters; + import java.util.Map; @@ -47,5 +49,5 @@ public interface ParameterAware { * * @param parameters a Map of parameters (name/value Strings). */ - public void setParameters(Map parameters); + public void setParameters(HttpParameters parameters); } diff --git a/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java index 29e22d346..4542d437c 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java @@ -135,7 +135,7 @@ public class ServletConfigInterceptor extends AbstractInterceptor implements Str } if (action instanceof ParameterAware) { - ((ParameterAware) action).setParameters(context.getParameters().getHttpParameters()); + ((ParameterAware) action).setParameters(context.getParameters()); } if (action instanceof ApplicationAware) { diff --git a/plugins/dwr/src/main/java/org/apache/struts2/validators/DWRValidator.java b/plugins/dwr/src/main/java/org/apache/struts2/validators/DWRValidator.java index c2a35cf43..4c279102b 100644 --- a/plugins/dwr/src/main/java/org/apache/struts2/validators/DWRValidator.java +++ b/plugins/dwr/src/main/java/org/apache/struts2/validators/DWRValidator.java @@ -28,8 +28,10 @@ import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.struts2.ServletActionContext; import org.apache.struts2.dispatcher.ApplicationMap; import org.apache.struts2.dispatcher.Dispatcher; +import org.apache.struts2.dispatcher.HttpParameters; import org.apache.struts2.dispatcher.RequestMap; import org.apache.struts2.dispatcher.SessionMap; @@ -72,18 +74,16 @@ public class DWRValidator { ServletContext servletContext = WebContextFactory.get().getServletContext(); HttpServletResponse res = WebContextFactory.get().getHttpServletResponse(); - Map requestParams = new HashMap(req.getParameterMap()); + HttpParameters.Builder requestParams = HttpParameters.create(req.getParameterMap()); if (params != null) { - requestParams.putAll(params); - } else { - params = requestParams; + requestParams = requestParams.withExtraParams(params); } Map requestMap = new RequestMap(req); Map session = new SessionMap(req); Map application = new ApplicationMap(servletContext); Dispatcher du = Dispatcher.getInstance(); HashMap ctx = du.createContextMap(requestMap, - params, + requestParams.build(), session, application, req, diff --git a/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPRuntime.java b/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPRuntime.java index 182fda42f..bd9b4a88a 100644 --- a/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPRuntime.java +++ b/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPRuntime.java @@ -21,6 +21,7 @@ package org.apache.struts2; import com.opensymphony.xwork2.ActionContext; +import org.apache.struts2.dispatcher.HttpParameters; import org.apache.struts2.views.util.UrlHelper; import javax.servlet.Servlet; @@ -53,11 +54,13 @@ public abstract class JSPRuntime { int i = location.indexOf("?"); if (i > 0) { //extract params from the url and add them to the request - Map parameters = ActionContext.getContext().getParameters(); + HttpParameters parameters = ActionContext.getContext().getParameters(); String query = location.substring(i + 1); Map queryParams = urlHelper.parseQueryString(query, true); - if (queryParams != null && !queryParams.isEmpty()) - parameters.putAll(queryParams); + if (queryParams != null && !queryParams.isEmpty()) { + parameters = parameters.clone(queryParams); + ActionContext.getContext().setParameters(parameters); + } location = location.substring(0, i); } diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java index 5f26f0825..9f70560e1 100644 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java +++ b/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java @@ -27,6 +27,7 @@ import com.opensymphony.xwork2.ActionProxyFactory; import com.opensymphony.xwork2.config.ConfigurationException; import com.opensymphony.xwork2.inject.Container; import com.opensymphony.xwork2.util.LocalizedTextUtil; +import com.sun.net.httpserver.HttpsParameters; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; import org.apache.commons.lang3.StringUtils; @@ -35,6 +36,7 @@ import org.apache.struts2.StrutsException; import org.apache.struts2.StrutsStatics; import org.apache.struts2.dispatcher.ApplicationMap; import org.apache.struts2.dispatcher.Dispatcher; +import org.apache.struts2.dispatcher.HttpParameters; import org.apache.struts2.dispatcher.RequestMap; import org.apache.struts2.dispatcher.SessionMap; import org.apache.struts2.dispatcher.mapper.ActionMapper; @@ -389,7 +391,7 @@ public class Jsr168Dispatcher extends GenericPortlet implements StrutsStatics { extraContext.put(StrutsStatics.HTTP_RESPONSE, servletResponse); extraContext.put(StrutsStatics.SERVLET_CONTEXT, servletContext); // End dummy servlet objects - extraContext.put(ActionContext.PARAMETERS, parameterMap); + extraContext.put(ActionContext.PARAMETERS, HttpParameters.create(parameterMap).build()); extraContext.put(ActionContext.SESSION, sessionMap); extraContext.put(ActionContext.APPLICATION, applicationMap);