Skip Dever created OFBIZ-5220:
---------------------------------

             Summary: request-redirect does not pass all parameters if none are 
specified with response-parameter
                 Key: OFBIZ-5220
                 URL: https://issues.apache.org/jira/browse/OFBIZ-5220
             Project: OFBiz
          Issue Type: Bug
          Components: ALL APPLICATIONS
    Affects Versions: Release Branch 12.04
         Environment: All
            Reporter: Skip Dever


The xsd documentation says "Automatically redirect all current request 
parameters to the new request or only redirected ..."

This is broken.  If you specify a request-redirect from a form (where the 
parameters are not in the url), these parameters are not passed on to the 
redirected url. 

Included here is a re-written function in RequestHandler.java is a solution 
that fixes things (Note that I did not modify the javadoc which describes how 
this new function actually works).  I commented out the old code and added 
there new stuff under the comment:

    /**
     * Creates a query string based on the redirect parameters for a request 
response, if specified, or for all request parameters if no redirect parameters 
are specified.
     *
     * @param request the Http request
     * @param requestResponse the RequestResponse Object
     * @return return the query string
     */
    public String makeQueryString(HttpServletRequest request, 
ConfigXMLReader.RequestResponse requestResponse) {
        if (requestResponse == null ||
                (requestResponse.redirectParameterMap.size() == 0 && 
requestResponse.redirectParameterValueMap.size() == 0)) {
                        /* Modified by skipd to include all parameters if none 
are specified with redirect-parameter
            Map<String, Object> urlParams = 
UtilHttp.getUrlOnlyParameterMap(request);
            String queryString = UtilHttp.urlEncodeArgs(urlParams, false);
            if(UtilValidate.isEmpty(queryString)) {
                return queryString;
            }
                        */
            StringBuilder queryString = new StringBuilder();
            Map<String, Object> parameters = UtilHttp.getParameterMap(request);
            for (String parameterName: parameters.keySet()) {
                Object value = parameters.get(parameterName);

                addNameValuePairToQueryString(queryString, parameterName, 
(String) value);
            }
            return "?" + queryString;
        } else {
            StringBuilder queryString = new StringBuilder();
            queryString.append("?");
            for (Map.Entry<String, String> entry: 
requestResponse.redirectParameterValueMap.entrySet()) {
                String name = entry.getKey();
                String value = entry.getValue();

                addNameValuePairToQueryString(queryString, name, (String) 
value);
            }
            return queryString.toString();
        }
    }


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to