Wicket 1.4.5 + Websphere Portal Express 6.1: query string parameters are not 
forwarded through WicketPortlet
------------------------------------------------------------------------------------------------------------

                 Key: WICKET-2711
                 URL: https://issues.apache.org/jira/browse/WICKET-2711
             Project: Wicket
          Issue Type: Bug
          Components: wicket-portlet
    Affects Versions: 1.4.5
         Environment: Windows XP SP3 
jdk1.5.0_15 
Wicket 1.4.5 
Spring 2.5.2 
Websphere Portal Express 6.1
            Reporter: Uttam Phalnikar


In my application, I am using portlet init parameter "viewPage" to define view 
page URL with query string parameter. For e.g.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        <portlet>
                <description>My Test</description>
                <portlet-name>Test</portlet-name>
                <display-name>Test</display-name>
                
<portlet-class>org.apache.wicket.protocol.http.portlet.WicketPortlet</portlet-class>
                <init-param>
                        <name>wicketFilterPath</name>
                        <value>/test</value>
                </init-param>
                <init-param>
                        <name>viewPage</name>
                        <value>/test?portletid=portlet1</value>
                </init-param>
                <supports>
                        <mime-type>*/*</mime-type>
                        <portlet-mode>VIEW</portlet-mode>
                </supports>
                <portlet-info>
                        <title>Test Portlet</title>
                        <keywords>Wicket</keywords>
                </portlet-info>
        </portlet>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
In my web.xml, I have filter mapping that maps "/test/*" to WicketFilter. The 
home page of my application displays appropriate contents on the basis of 
"portletid".

This setup works fine with JBoss Portal 2.7.2, but with Websphere Portal 
Express 6.1, my home page never gets the "portletid" parameters. 

After investigation, it was realized that 
org.apache.wicket.protocol.http.portlet.PortletServletRequestWrapper has logic 
to obtain the querystring from wrapped request, but doesnt override methods 
getParameterMap / getParameters & getParameter to convert query string into 
parameters. I am not very sure whether Websphere Portal Server has any setting 
to do this conversion. 


Here is the workaround that I have used
1. Created MyServletWebRequest that extends ServletWebRequest 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
public class MyServletWebRequest extends ServletWebRequest {
  private Map<String, String[]> paramMap;

  public MyServletWebRequest(HttpServletRequest httpServletRequest) {
    super(httpServletRequest);
    if (httpServletRequest instanceof PortletServletRequestWrapper) {
      String qs = this.getQueryString();
      if (StringUtil.hasLength(qs)) {
        paramMap = new HashMap<String, String[]>();
        StringTokenizer tokens = new StringTokenizer(qs, "&");
        while (tokens.hasMoreTokens()) {
          String tuple = tokens.nextToken();
          int index = tuple.indexOf("=");
          if (index != -1) {
            String key = tuple.substring(0, index);
            String value = tuple.substring(index + 1);
            paramMap.put(key, new String[] { value });
          }
        }
      } else {
        paramMap = Collections.EMPTY_MAP;
      }
    }

  }

  @Override
  public Map getParameterMap() {
    Map<String, String[]> combinedMap =
      new HashMap<String, String[]>(super.getParameterMap());
      combinedMap.putAll(paramMap);
    return combinedMap;
  }

  @Override
  public String getParameter(String key) {
    if (paramMap.containsKey(key))
      return paramMap.get(key)[0];

    return super.getParameter(key);
  }

  @Override
  public String[] getParameters(String key) {
    if (paramMap.containsKey(key))
      return paramMap.get(key);

    return super.getParameters(key);
  }

}
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

2. Then updated the MyWebApplication class (extends WebApplication) to override 
newWebRequest method
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  @Override
  protected WebRequest newWebRequest(HttpServletRequest servletRequest) {
    return new MyServletWebRequest(servletRequest);
  }
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
That has solved the issue. 

I think PortletServletRequestWrapper should override getParameterMap / 
getParameters & getParameter methods. 

-- 
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