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/