[ 
https://issues.apache.org/jira/browse/WICKET-1484?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12589084#action_12589084
 ] 

Erik van Oosten commented on WICKET-1484:
-----------------------------------------

An alternative is to replace the getParameterMap() method in ServletWebRequest 
like this:

        public Map getParameterMap()
        {
                // Lazy-init parameter map. Only make one copy. It's more 
efficient, and
                // we can add stuff to it (which the BookmarkablePage stuff 
does).
                if (parameterMap == null)
                {
                        parameterMap = new 
HashMap(httpServletRequest.getParameterMap());

            // Replace single value parameter arrays with a single string.
            for (Iterator i = parameterMap.keySet().iterator(); i.hasNext(); )
            {
                Object key = i.next();
                Object value = parameterMap.get(key);
                if ((value instanceof String[]) && ((String[]) value).length == 
1)
                {
                    parameterMap.put(key, ((String[]) value)[0]);
                }
            }
        }
                // return a mutable copy
                return parameterMap;
        }


> class cast exception (String) in MixedParamUrlCodingStrategy with additional 
> params with patch
> ----------------------------------------------------------------------------------------------
>
>                 Key: WICKET-1484
>                 URL: https://issues.apache.org/jira/browse/WICKET-1484
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.3.2
>            Reporter: Michael Grinner
>         Attachments: 1484_patch.txt
>
>
> MixedParamUrlCodingStrategy has a bug in
> MixedParamUrlCodingStrategy
> appendParameters
>               if (!parameterNamesToAdd.isEmpty())
>               {
>                       boolean first = true;
>                       final Iterator iterator;
>                       if (UnitTestSettings.getSortUrlParameters())
>                       {
>                               iterator = new 
> TreeSet(parameterNamesToAdd).iterator();
>                       }
>                       else
>                       {
>                               iterator = parameterNamesToAdd.iterator();
>                       }
>                       while (iterator.hasNext())
>                       {
>                               url.append(first ? '?' : '&');
>                               String parameterName = (String)iterator.next();
> @@@                   String value = (String)parameters.get(parameterName);
>                       
> url.append(urlEncode(parameterName)).append("=").append(urlEncode(value));
>                               first = false;
>                       }
>               }
> where value should be a String[] not a String.
> like in AbstractRequestTargetUrlCodingStrategy
> appendParameters
>       String[] values = (String[])value;
>       for (int i = 0; i < values.length; i++)
>       {
>               appendValue(url, entry.getKey().toString(), values[i]);
>       }
> it works ok after patching MixedParamUrlCodingStrategy to
>        if (!parameterNamesToAdd.isEmpty()) {
>            boolean first = true;
>            final Iterator iterator;
>            if (UnitTestSettings.getSortUrlParameters()) {
>                iterator = new TreeSet(parameterNamesToAdd).iterator();
>            } else {
>                iterator = parameterNamesToAdd.iterator();
>            }
>            while (iterator.hasNext()) {
>                url.append(first ? '?' : '&');
>                String parameterName = (String) iterator.next();
>                Object value = parameters.get(parameterName);
>                if (value != null) {
>                    if (value instanceof String[]) {
>                        String[] values = (String[]) value;
>                        for (String element : values) {
> url.append(this.urlEncode(parameterName)).append("=").append(this.urlEncode(element));
>                        }
>                    } else {
> url.append(this.urlEncode(parameterName)).append("=").append(this.urlEncode(value.toString()));
>                    }
>                }
>                first = false;
>            }
>        }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to