Generally, I would tend to first put "static" parameters into the Global
Forward, so they can have logical names, and then let the Struts
html:link tag add whatever else was needed. If more than one set of
dynamic parameter is needed, because of normalization issues, then a Map
can be passed to the link tag.

-Ted.

Bill Clinton wrote:
> 
> Ted,
>     Maybe I am mistaken, but I think he wants to add the parameters in
> the perform method of his Action.  So in the case the html:link tag
> might not work.
> 
> For cases like these (and I am open to better suggestions) I have
> extended the Action Forward class to make a ParameterActionForward
> class.  Here is the code:
> 
> ########### ParameterActionForward.java ##########
> 
> import org.apache.struts.action.ActionForward;
> import java.util.HashMap;
> import java.util.Iterator;
> 
> /**
>   * Implementation of <strong>ActionForward</strong> that allows
> requestParameters
>   * added on to the path.
>   *
>   * @author Bill Clinton
>   * @version $Id: ParameterActionForward.java,v 1.1 2001/08/17 15:24:42
> bclinton Exp $
>   */
> public final class ParameterActionForward extends ActionForward {
> 
>      private HashMap parameters = new HashMap();
>      private String  path;
> 
>      private static final String questionMark = "?";
>      private static final String ampersand = "&";
>      private static final String equals = "=";
> 
>      public ParameterActionForward(ActionForward forward) {
> 
>          setName(forward.getName());
>          setPath(forward.getPath());
>          setRedirect(forward.getRedirect());
> 
>      }
> 
>      public void addParameter(String paramName, Object paramValue) {
> 
>          addParameter(paramName,paramValue.toString());
> 
>      }
> 
>      public void addParameter(String paramName, String paramValue) {
> 
>          parameters.put(paramName,paramValue);
> 
>      }
> 
>      public void setPath(String path) {
> 
>          this.path=path;
> 
>      }
> 
>      public String getPath() {
> 
>          StringBuffer sb = new StringBuffer();
>          sb.append(path);
> 
>          boolean firstTimeThrough = true;
>          if (parameters!=null && !parameters.isEmpty()) {
> 
>              sb.append(questionMark);
> 
>              Iterator it = parameters.keySet().iterator();
>              while (it.hasNext()) {
> 
>                  String paramName = (String)it.next();
>                  String paramValue = (String)parameters.get(paramName);
> 
>                  if (firstTimeThrough) {
>                      firstTimeThrough=false;
>                  } else {
>                      sb.append(ampersand);
>                  }
>                  sb.append(paramName);
>                  sb.append(equals);
>                  sb.append(paramValue);
> 
>              }
>          }
>          return sb.toString();
>      }
> }
> ########### End ParameterActionForward.java ##########
> 
> This is an example of using the class to add two parameters to a forward:
> 
> ParameterActionForward forward = new ParameterActionForward(
>         mapping.findForward("success"));
> forward.addParameter("id",String.valueOf(questionForm.getQuestionId()));
> forward.addParameter("modified","true");
> return forward;
> 
> I hope this is useful to you Krishna.  And I welcome any (constructive)
> peer criticism.  In fact, as I was pasteing, I noticed a potential bug.
> I don't think this would work on forwards that didn't have redirect set
> to true, so play with it, test it, and modify it before you use it.  I
> am using it for something specific and it works for me.
> 
> Bill
> 
> Ted Husted wrote:
> 
> > Then you would use a html:link tag with the actionForm as the source.
> >
> > http://jakarta.apache.org/struts/struts-html.html#link
> >
> > Bhamidi Krishna wrote:
> >
> >> Hi Ted,
> >>
> >> thankyou for the mail,
> >>
> >> but what if mode and value (either one or both) keep getting generated
> >> dynamically dependent on the actionForm ?
> >>
> >> Krishna
> >>
> >>
> >>> Just put it in as a Global Forward, something like this
> >>>
> >>>      <forward name="itemFindScript"
> >>>           path="/do/item/Search?column=script"/>
> >>>
> >>> or in your case
> >>>
> >>>      <forward name="something"
> >>>           path="/do/Something?mode=21"/>
> >>>
> >>> or, using extension mapping
> >>>
> >>>      <forward name="something"
> >>>           path="/Something.do?mode=21"/>
> >>>
> >>>
> >>> You can also refer to Global Forwards in the link tag, and Struts will
> >>> append any other parameters you supply (paramID, paramProperty).
> >>>
> >>> Bhamidi Krishna wrote:
> >>>
> >>>> Hi,
> >>>>
> >>>> I have an elementary question. I want to encode the URL of my jsp page
> >>>
> >>> that
> >>>
> >>>> I call using findForward() say something like a mode parameter.
> >>>>
> >>>> So my jsp url will look like:
> >>>> http://localhost:8080/someURL/doSomething?mode=21
> >>>>
> >>>> How can I do that?
> >>>>
> >>>> Krishna
> >>>>
> >>>> _________________________________________________________________
> >>>> Get your FREE download of MSN Explorer at
> >>>
> >>> http://explorer.msn.com/intl.asp
> >>>
> >>> -- Ted Husted, Husted dot Com, Fairport NY USA.
> >>> -- Custom Software ~ Technical Services.
> >>> -- Tel +1 716 737-3463
> >>> -- http://www.husted.com/about/struts/
> >>
> >> _________________________________________________________________
> >> Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp
> >
> >
> > -- Ted Husted, Husted dot Com, Fairport NY USA.
> > -- Custom Software ~ Technical Services.
> > -- Tel +1 716 737-3463
> > -- http://www.husted.com/about/struts/

-- Ted Husted, Husted dot Com, Fairport NY USA.
-- Custom Software ~ Technical Services.
-- Tel +1 716 737-3463
-- http://www.husted.com/about/struts/

Reply via email to