craigmcc 01/05/12 15:35:43 Modified: src/share/org/apache/struts/util RequestUtils.java web/example registration.jsp Log: Fix the way that RequestUtils.computeParameters() adds parameters to a URL dynamically: * Append to the correct Map (results) instead of the input map (map). * Do not try to add parameters with null values. This will cause problems for many containers -- in Servlet 2.3 trying to add a request or session attribute with setAttribute("foo", null) is treated the same as calling removeAttribute("foo"), but many 2.2 containers don't handle this right. * Allow the single-parameter value mechanism to use non-String values again, by using toString() instead of a String cast. PR: Bugzilla #1719 Submitted by: Hal Deadman <[EMAIL PROTECTED]> Revision Changes Path 1.14 +40 -30 jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java Index: RequestUtils.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- RequestUtils.java 2001/05/12 20:34:01 1.13 +++ RequestUtils.java 2001/05/12 22:35:43 1.14 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v 1.13 2001/05/12 20:34:01 craigmcc Exp $ - * $Revision: 1.13 $ - * $Date: 2001/05/12 20:34:01 $ + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v 1.14 2001/05/12 22:35:43 craigmcc Exp $ + * $Revision: 1.14 $ + * $Date: 2001/05/12 22:35:43 $ * * ==================================================================== * @@ -95,7 +95,7 @@ * in the Struts controller framework. * * @author Craig R. McClanahan - * @version $Revision: 1.13 $ $Date: 2001/05/12 20:34:01 $ + * @version $Revision: 1.14 $ $Date: 2001/05/12 22:35:43 $ */ public class RequestUtils { @@ -185,8 +185,9 @@ // Locate the Map containing our multi-value parameters map Map map = null; try { - map = (Map) lookup(pageContext, name, - property, scope); + if (name != null) + map = (Map) lookup(pageContext, name, + property, scope); } catch (ClassCastException e) { saveException(pageContext, e); throw new JspException @@ -205,35 +206,44 @@ results = new HashMap(); // Add the single-value parameter (if any) - if (paramId != null) { - String paramValue = null; + if ((paramId != null) && (paramName != null)) { + + Object paramValue = null; try { - paramValue =(String) lookup(pageContext, paramName, - paramProperty, paramScope); - } catch (ClassCastException e) { - saveException(pageContext, e); - throw new JspException - (messages.getMessage("parameters.single", paramName, - paramProperty, paramScope)); + paramValue = lookup(pageContext, paramName, + paramProperty, paramScope); } catch (JspException e) { saveException(pageContext, e); throw e; } - Object mapValue = map.get(paramId); - if (mapValue == null) - map.put(paramId, paramValue); - else if (mapValue instanceof String) { - String newValues[] = new String[2]; - newValues[0] = (String) mapValue; - newValues[1] = paramValue; - map.put(paramId, newValues); - } else /* if (mapValue instanceof String[]) */ { - String oldValues[] = (String[]) mapValue; - String newValues[] = new String[oldValues.length + 1]; - System.arraycopy(oldValues, 0, newValues, 0, oldValues.length); - newValues[oldValues.length] = paramValue; - map.put(paramId, newValues); + + if (paramValue != null) { + + String paramString = null; + if (paramValue instanceof String) + paramString = (String) paramValue; + else + paramString = paramValue.toString(); + + Object mapValue = results.get(paramId); + if (mapValue == null) + results.put(paramId, paramString); + else if (mapValue instanceof String) { + String newValues[] = new String[2]; + newValues[0] = (String) mapValue; + newValues[1] = paramString; + results.put(paramId, newValues); + } else /* if (mapValue instanceof String[]) */ { + String oldValues[] = (String[]) mapValue; + String newValues[] = new String[oldValues.length + 1]; + System.arraycopy(oldValues, 0, newValues, 0, + oldValues.length); + newValues[oldValues.length] = paramString; + results.put(paramId, newValues); + } + } + } // Add our transaction control token (if requested) @@ -244,7 +254,7 @@ token = (String) session.getAttribute(Action.TRANSACTION_TOKEN_KEY); if (token != null) - map.put(Constants.TOKEN_KEY, token); + results.put(Constants.TOKEN_KEY, token); } // Return the completed Map 1.19 +4 -2 jakarta-struts/web/example/registration.jsp Index: registration.jsp =================================================================== RCS file: /home/cvs/jakarta-struts/web/example/registration.jsp,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- registration.jsp 2001/02/20 05:20:11 1.18 +++ registration.jsp 2001/05/12 22:35:43 1.19 @@ -165,9 +165,11 @@ </table> -<app:linkUser page="/editSubscription.do?action=Create"> +<html:link page="/editSubscription.do?action=Create" paramId="username" + paramName="registrationForm" paramProperty="username"> <bean:message key="registration.addSubscription"/> -</app:linkUser> +</html:link> + </logic:equal>