I fixed the problem with redirect.action. It appears Pat's GD code didn't
take into account parameters getting passed to views. As I wrote it, only
parameters only affect views that are actions.

I added a parameters Map to ViewActionWrapper, and pulled getParams from
the 1.2.1 dist to do the parsing.

diffs attached.

--Erik
8a9,10
> import java.util.Map;
> 
12a15
>    private Map params;
20c23,29
<    // Public --------------------------------------------------------
---
>    public ViewActionWrapper(String actionName, Map params)
>    {
>       this.actionName = actionName;
>       this.params = params;
>    }
> 
>       // Public --------------------------------------------------------
24a34,43
> 
>    public boolean hasParams()
>    {
>       return params != null;
>    }
>    
>    public Map getParams()
>    {
>       return params;
>    }
diff was unable to work with this file, so here's a description of the change:

import webwork.util.BeanUtil;
at line 133:
while (view instanceof ViewActionWrapper)
      {
         ViewActionWrapper viewActionWrapper = (ViewActionWrapper)view;
         actionName = viewActionWrapper.getActionName();
         action = ActionFactory.getAction(actionName);
         if(viewActionWrapper.hasParams())
            BeanUtil.setProperties(viewActionWrapper.getParams(), action);

         try
         {
            result = action.execute();


12a13,14
> import java.util.*;
> 
59a62,71
> 
>             // The view has parameters
>             if (returnView.indexOf(postFix + "?") != -1) {
>                 try {
>                     String newActionName = returnView.substring(0, 
>returnView.indexOf(postFix + "?"));
>                     return new ViewActionWrapper(newActionName, 
>getParams(returnView));
>                 } catch (Exception e) {
>                     // ignore, return normally;
>                 }
>             }
110a123,149
> 
>    /**
>     * Extract parameter map from a string. The map is made
>     * from the name value pair after '?'; i.e., ?name1=value&name2=value
>     */
>    private Map getParams(String candidateAction) {
>      if (candidateAction==null) return Collections.EMPTY_MAP;
>      try {
>          String paramsList = 
>candidateAction.substring(candidateAction.indexOf('?')+1);
>          StringTokenizer stParams = new StringTokenizer(paramsList, "&");
>          Map params = new HashMap();
>          while (stParams.hasMoreTokens()) {
>              String nameValue = stParams.nextToken();
>              StringTokenizer stNameValuePairs = new StringTokenizer(nameValue, "=");
>              while (stNameValuePairs.hasMoreTokens()) {
>                  String name = stNameValuePairs.nextToken();
>                  String value = stNameValuePairs.nextToken();
>                  params.put(name, value);
>              }
>          }
>          return params;
>      } catch (NoSuchElementException nse) {
>          return Collections.EMPTY_MAP;
>      } catch (Exception e) {
>          return Collections.EMPTY_MAP;
>      }
>    }

Reply via email to