Author: jogep Date: Tue Apr 26 18:28:38 2011 New Revision: 1096838 URL: http://svn.apache.org/viewvc?rev=1096838&view=rev Log: WW-3450: supressEmptyParameters option is misspelled
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java?rev=1096838&r1=1096837&r2=1096838&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java Tue Apr 26 18:28:38 2011 @@ -21,51 +21,60 @@ package org.apache.struts2.dispatcher; +import java.util.Arrays; +import java.util.List; + +import org.apache.struts2.dispatcher.mapper.ActionMapper; +import org.apache.struts2.dispatcher.mapper.ActionMapping; + import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; import com.opensymphony.xwork2.util.reflection.ReflectionExceptionHandler; -import org.apache.struts2.dispatcher.mapper.ActionMapper; -import org.apache.struts2.dispatcher.mapper.ActionMapping; - -import java.util.Arrays; -import java.util.List; /** * <!-- START SNIPPET: description --> - * - * This result uses the {@link ActionMapper} provided by the {@link ActionMapperFactory} to redirect the browser to a - * URL that invokes the specified action and (optional) namespace. This is better than the {@link ServletRedirectResult} - * because it does not require you to encode the URL patterns processed by the {@link ActionMapper} in to your struts.xml - * configuration files. This means you can change your URL patterns at any point and your application will still work. - * It is strongly recommended that if you are redirecting to another action, you use this result rather than the + * + * This result uses the {@link ActionMapper} provided by the + * {@link ActionMapperFactory} to redirect the browser to a URL that invokes the + * specified action and (optional) namespace. This is better than the + * {@link ServletRedirectResult} because it does not require you to encode the + * URL patterns processed by the {@link ActionMapper} in to your struts.xml + * configuration files. This means you can change your URL patterns at any point + * and your application will still work. It is strongly recommended that if you + * are redirecting to another action, you use this result rather than the * standard redirect result. - * - * See examples below for an example of how request parameters could be passed in. - * + * + * See examples below for an example of how request parameters could be passed + * in. + * * <!-- END SNIPPET: description --> - * + * * <b>This result type takes the following parameters:</b> - * + * * <!-- START SNIPPET: params --> - * + * * <ul> - * - * <li><b>actionName (default)</b> - the name of the action that will be redirect to</li> - * - * <li><b>namespace</b> - used to determine which namespace the action is in that we're redirecting to . If namespace is - * null, this defaults to the current namespace</li> - * - * <li><b>supressEmptyParameters</b> - optional boolean (defaults to false) that can prevent parameters with no values - * from being included in the redirect URL.</li> - * + * + * <li><b>actionName (default)</b> - the name of the action that will be + * redirect to</li> + * + * <li><b>namespace</b> - used to determine which namespace the action is in + * that we're redirecting to . If namespace is null, this defaults to the + * current namespace</li> + * + * <li><b>suppressEmptyParameters</b> - optional boolean (defaults to false) that + * can prevent parameters with no values from being included in the redirect + * URL.</li> + * * </ul> - * + * * <!-- END SNIPPET: params --> - * + * * <b>Example:</b> - * - * <pre><!-- START SNIPPET: example --> + * + * <pre> + * <!-- START SNIPPET: example --> * <package name="public" extends="struts-default"> * <action name="login" class="..."> * <!-- Redirect to another namespace --> @@ -75,19 +84,19 @@ import java.util.List; * </result> * </action> * </package> - * + * * <package name="secure" extends="struts-default" namespace="/secure"> * <-- Redirect to an action in the same namespace --> * <action name="dashboard" class="..."> * <result>dashboard.jsp</result> * <result name="error" type="redirectAction">error</result> * </action> - * + * * <action name="error" class="..."> * <result>error.jsp</result> * </action> * </package> - * + * * <package name="passingRequestParameters" extends="struts-default" namespace="/passingRequestParameters"> * <-- Pass parameters (reportType, width and height) --> * <!-- @@ -102,14 +111,15 @@ import java.util.List; * <param name="width">100</param> * <param name="height">100</param> * <param name="empty"></param> - * <param name="supressEmptyParameters">true</param> + * <param name="suppressEmptyParameters">true</param> * </result> * </action> * </package> - * - * - * <!-- END SNIPPET: example --></pre> - * + * + * + * <!-- END SNIPPET: example --> + * </pre> + * * @see ActionMapper */ public class ServletActionRedirectResult extends ServletRedirectResult implements ReflectionExceptionHandler { @@ -137,7 +147,6 @@ public class ServletActionRedirectResult this(null, actionName, method, null); } - public ServletActionRedirectResult(String namespace, String actionName, String method) { this(namespace, actionName, method, null); } @@ -149,21 +158,26 @@ public class ServletActionRedirectResult this.method = method; } - /** * @see com.opensymphony.xwork2.Result#execute(com.opensymphony.xwork2.ActionInvocation) */ - public void execute(ActionInvocation invocation) throws Exception { + public void execute(ActionInvocation invocation) throws Exception + { actionName = conditionalParse(actionName, invocation); - if (namespace == null) { + if (namespace == null) + { namespace = invocation.getProxy().getNamespace(); - } else { + } + else + { namespace = conditionalParse(namespace, invocation); } - if (method == null) { + if (method == null) + { method = ""; } - else { + else + { method = conditionalParse(method, invocation); } @@ -176,34 +190,41 @@ public class ServletActionRedirectResult /** * Sets the action name - * - * @param actionName The name + * + * @param actionName + * The name */ - public void setActionName(String actionName) { + public void setActionName(String actionName) + { this.actionName = actionName; } /** * Sets the namespace - * - * @param namespace The namespace + * + * @param namespace + * The namespace */ - public void setNamespace(String namespace) { + public void setNamespace(String namespace) + { this.namespace = namespace; } /** * Sets the method - * - * @param method The method + * + * @param method + * The method */ - public void setMethod(String method) { + public void setMethod(String method) + { this.method = method; } - protected List<String> getProhibitedResultParams() { - return Arrays.asList(new String[]{ - DEFAULT_PARAM, "namespace", "method", "encode", "parse", "location", - "prependServletContext", "supressEmptyParameters", "anchor"}); + protected List<String> getProhibitedResultParams() + { + return Arrays.asList(new String[] { + DEFAULT_PARAM, "namespace", "method", "encode", "parse", "location", "prependServletContext", "suppressEmptyParameters", "anchor" + }); } } Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java?rev=1096838&r1=1096837&r2=1096838&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java Tue Apr 26 18:28:38 2011 @@ -21,21 +21,8 @@ package org.apache.struts2.dispatcher; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.config.entities.ResultConfig; -import com.opensymphony.xwork2.inject.Inject; -import com.opensymphony.xwork2.util.logging.Logger; -import com.opensymphony.xwork2.util.logging.LoggerFactory; -import com.opensymphony.xwork2.util.reflection.ReflectionException; -import com.opensymphony.xwork2.util.reflection.ReflectionExceptionHandler; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.dispatcher.mapper.ActionMapper; -import org.apache.struts2.dispatcher.mapper.ActionMapping; -import org.apache.struts2.views.util.UrlHelper; +import static javax.servlet.http.HttpServletResponse.SC_FOUND; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Arrays; import java.util.Iterator; @@ -43,12 +30,26 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import static javax.servlet.http.HttpServletResponse.SC_FOUND; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.dispatcher.mapper.ActionMapper; +import org.apache.struts2.dispatcher.mapper.ActionMapping; +import org.apache.struts2.views.util.UrlHelper; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.config.entities.ResultConfig; +import com.opensymphony.xwork2.inject.Inject; +import com.opensymphony.xwork2.util.logging.Logger; +import com.opensymphony.xwork2.util.logging.LoggerFactory; +import com.opensymphony.xwork2.util.reflection.ReflectionException; +import com.opensymphony.xwork2.util.reflection.ReflectionExceptionHandler; /** * <!-- START SNIPPET: description --> - * + * * Calls the {@link HttpServletResponse#sendRedirect(String) sendRedirect} * method to the location specified. The response is told to redirect the * browser to the specified location (a new request from the client). The @@ -57,40 +58,42 @@ import static javax.servlet.http.HttpSer * available. This is because actions are built on a single-thread model. The * only way to pass data is through the session or with web parameters * (url?name=value) which can be OGNL expressions. - * + * * <!-- END SNIPPET: description --> * <p/> * <b>This result type takes the following parameters:</b> - * + * * <!-- START SNIPPET: params --> - * + * * <ul> - * + * * <li><b>location (default)</b> - the location to go to after execution.</li> - * + * * <li><b>parse</b> - true by default. If set to false, the location param will * not be parsed for Ognl expressions.</li> - * + * * <li><b>anchor</b> - optional, you can specify an anchor for result.</li> - * + * * </ul> - * + * * <p> * This result follows the same rules from {@link StrutsResultSupport}. * </p> - * + * * <!-- END SNIPPET: params --> - * + * * <b>Example:</b> - * - * <pre><!-- START SNIPPET: example --> + * + * <pre> + * <!-- START SNIPPET: example --> * <result name="success" type="redirect"> * <param name="location">foo.jsp</param> * <param name="parse">false</param> * <param name="anchor">FRAGMENT</param> * </result> - * <!-- END SNIPPET: example --></pre> - * + * <!-- END SNIPPET: example --> + * </pre> + * */ public class ServletRedirectResult extends StrutsResultSupport implements ReflectionExceptionHandler { @@ -104,10 +107,10 @@ public class ServletRedirectResult exten protected int statusCode = SC_FOUND; - protected boolean supressEmptyParameters = false; + protected boolean suppressEmptyParameters = false; protected Map<String, String> requestParameters = new LinkedHashMap<String, String>(); - + protected String anchor; public ServletRedirectResult() { @@ -117,41 +120,50 @@ public class ServletRedirectResult exten public ServletRedirectResult(String location) { this(location, null); } - + public ServletRedirectResult(String location, String anchor) { super(location); this.anchor = anchor; } - + @Inject - public void setActionMapper(ActionMapper mapper) { + public void setActionMapper(ActionMapper mapper) + { this.actionMapper = mapper; } - public void setStatusCode(int code) { + public void setStatusCode(int code) + { this.statusCode = code; } /** * Set the optional anchor value. + * * @param anchor */ - public void setAnchor(String anchor) { + public void setAnchor(String anchor) + { this.anchor = anchor; } /** - * Sets whether or not to prepend the servlet context path to the redirected URL. - * - * @param prependServletContext <tt>true</tt> to prepend the location with the servlet context path, - * <tt>false</tt> otherwise. + * Sets whether or not to prepend the servlet context path to the redirected + * URL. + * + * @param prependServletContext + * <tt>true</tt> to prepend the location with the servlet context + * path, <tt>false</tt> otherwise. */ - public void setPrependServletContext(boolean prependServletContext) { + public void setPrependServletContext(boolean prependServletContext) + { this.prependServletContext = prependServletContext; } - - public void execute(ActionInvocation invocation) throws Exception { - if (anchor != null) { + + public void execute(ActionInvocation invocation) throws Exception + { + if (anchor != null) + { anchor = conditionalParse(anchor, invocation); } @@ -159,47 +171,62 @@ public class ServletRedirectResult exten } /** - * Redirects to the location specified by calling {@link HttpServletResponse#sendRedirect(String)}. - * - * @param finalLocation the location to redirect to. - * @param invocation an encapsulation of the action execution state. - * @throws Exception if an error occurs when redirecting. + * Redirects to the location specified by calling + * {@link HttpServletResponse#sendRedirect(String)}. + * + * @param finalLocation + * the location to redirect to. + * @param invocation + * an encapsulation of the action execution state. + * @throws Exception + * if an error occurs when redirecting. */ - protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception { + protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception + { ActionContext ctx = invocation.getInvocationContext(); HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); - if (isPathUrl(finalLocation)) { - if (!finalLocation.startsWith("/")) { - ActionMapping mapping = actionMapper.getMapping( - request, Dispatcher.getInstance().getConfigurationManager()); + if (isPathUrl(finalLocation)) + { + if (!finalLocation.startsWith("/")) + { + ActionMapping mapping = actionMapper.getMapping(request, Dispatcher.getInstance().getConfigurationManager()); String namespace = null; - if (mapping != null) { + if (mapping != null) + { namespace = mapping.getNamespace(); } - if ((namespace != null) && (namespace.length() > 0) && (!"/".equals(namespace))) { + if ((namespace != null) && (namespace.length() > 0) && (!"/".equals(namespace))) + { finalLocation = namespace + "/" + finalLocation; - } else { + } + else + { finalLocation = "/" + finalLocation; } } // if the URL's are relative to the servlet context, append the servlet context path - if (prependServletContext && (request.getContextPath() != null) && (request.getContextPath().length() > 0)) { + if (prependServletContext && (request.getContextPath() != null) && (request.getContextPath().length() > 0)) + { finalLocation = request.getContextPath() + finalLocation; } ResultConfig resultConfig = invocation.getProxy().getConfig().getResults().get(invocation.getResultCode()); - if (resultConfig != null ) { + if (resultConfig != null) + { Map resultConfigParams = resultConfig.getParams(); - for (Iterator i = resultConfigParams.entrySet().iterator(); i.hasNext();) { + for (Iterator i = resultConfigParams.entrySet().iterator(); i.hasNext();) + { Map.Entry e = (Map.Entry) i.next(); - if (!getProhibitedResultParams().contains(e.getKey())) { + if (!getProhibitedResultParams().contains(e.getKey())) + { String potentialValue = e.getValue() == null ? "" : conditionalParse(e.getValue().toString(), invocation); - if (!supressEmptyParameters || ((potentialValue != null) && (potentialValue.length() > 0))) { + if (!suppressEmptyParameters || ((potentialValue != null) && (potentialValue.length() > 0))) + { requestParameters.put(e.getKey().toString(), potentialValue); } } @@ -210,39 +237,47 @@ public class ServletRedirectResult exten UrlHelper.buildParametersString(requestParameters, tmpLocation, "&"); // add the anchor - if (anchor != null) { + if (anchor != null) + { tmpLocation.append('#').append(anchor); } finalLocation = response.encodeRedirectURL(tmpLocation.toString()); } - if (LOG.isDebugEnabled()) { + if (LOG.isDebugEnabled()) + { LOG.debug("Redirecting to finalLocation " + finalLocation); } sendRedirect(response, finalLocation); } - protected List<String> getProhibitedResultParams() { - return Arrays.asList(new String[]{ - DEFAULT_PARAM, "namespace", "method", "encode", "parse", "location", - "prependServletContext", "supressEmptyParameters", "anchor"}); + protected List<String> getProhibitedResultParams() + { + return Arrays.asList(new String[] { + DEFAULT_PARAM, "namespace", "method", "encode", "parse", "location", "prependServletContext", "suppressEmptyParameters", "anchor" + }); } - /** - * Sends the redirection. Can be overridden to customize how the redirect is handled (i.e. to use a different - * status code) - * - * @param response The response - * @param finalLocation The location URI + * Sends the redirection. Can be overridden to customize how the redirect is + * handled (i.e. to use a different status code) + * + * @param response + * The response + * @param finalLocation + * The location URI * @throws IOException */ - protected void sendRedirect(HttpServletResponse response, String finalLocation) throws IOException { - if (SC_FOUND == statusCode) { + protected void sendRedirect(HttpServletResponse response, String finalLocation) throws IOException + { + if (SC_FOUND == statusCode) + { response.sendRedirect(finalLocation); - } else { + } + else + { response.setStatus(statusCode); response.setHeader("Location", finalLocation); response.getWriter().write(finalLocation); @@ -251,7 +286,8 @@ public class ServletRedirectResult exten } - private static boolean isPathUrl(String url) { + private static boolean isPathUrl(String url) + { // filter out "http:", "https:", "mailto:", "file:", "ftp:" // since the only valid places for : in URL's is before the path specification // either before the port, or after the protocol @@ -259,26 +295,32 @@ public class ServletRedirectResult exten } /** - * Sets the supressEmptyParameters option - * - * @param supressEmptyParameters The new value for this option + * Sets the suppressEmptyParameters option + * + * @param suppressEmptyParameters + * The new value for this option */ - public void setSupressEmptyParameters(boolean supressEmptyParameters) { - this.supressEmptyParameters = supressEmptyParameters; + public void setSuppressEmptyParameters(boolean suppressEmptyParameters) + { + this.suppressEmptyParameters = suppressEmptyParameters; } /** * Adds a request parameter to be added to the redirect url - * - * @param key The parameter name - * @param value The parameter value + * + * @param key + * The parameter name + * @param value + * The parameter value */ - public ServletRedirectResult addParameter(String key, Object value) { + public ServletRedirectResult addParameter(String key, Object value) + { requestParameters.put(key, String.valueOf(value)); return this; } - public void handle(ReflectionException ex) { + public void handle(ReflectionException ex) + { // Only log as debug as they are probably parameters to be appended to the url LOG.debug(ex.getMessage(), ex); }