We help IT Professionals succeed at work.

Pass parameters to Struts forward

dualsoul
dualsoul asked
on
I need to pass some parameters to my forward,like that:

            www.something/myapp/newslist.do?sysId=4

here is my action delaration:

        <action path="/newscreate"
              type="NewsCreateAction"
              name="newsForm">
              <forward name="success" path="/newslist.do"/>
        </action>

       
        <action path="/newslist"
              type="NewsListAction">
              <forward name="success" path="/NewsSystem/newslist.jsp"/>
        </action>

and here is my forward code in NewsCreateAction:
        //I want to add some parameters here
      // Forward control to the specified success URI
            return (mapping.findForward("success"));

...i did'nt find this in Struts docs, and i'm too lazy today
to dig Struts sources, it's a friday ;)

Crossposted in JSP.
Comment
Watch Question

Mick BarryJava Developer
Top Expert 2010

Commented:
try setting redirect to false in your forward:
<forward name="success" path="/NewsSystem/newslist.jsp" redirect="false"/>
Top Expert 2004
Commented:
Hiya!

I was trying to do this too...with no  success...what I ended up doing was (I haven't got my source code here at home, so this will  be approximate):

    ActionMapping success = mapping.findForward("success") ;
    success = new ActionMapping( success.getPath() + "?sysid=" + sysid, success.getRedirect() ) ;
    return success ;

Hope that helps you with a solution, and I hope you find a nicer way to do it, as then I will use that way too ;-)

Tim

Author

Commented:
>  try setting redirect to false in your forward:
if it's false, i even can't point my browser to    ......../newslist.do?sysId=4

ohhh....it seems i need to examine Struts sources...hm...%-/
strange...so simple thing, and no support for it...

Author

Commented:
hm...yeah...there no anything about it in Struts ;(
Tim, i believe you mean ActionForward not ActionMapping :)
I get the same answer from JSP guys.
So, i write simple wrapper class for it, like this :
................................
import java.util.*;
import org.apache.struts.action.*;

/**
*  Encupsulates parameters for ActionForward.
*/
public class ForwardParameters{
      private Map params=new HashMap();
      
      public ForwardParameters add(String paramName,String paramValue){
            params.put(paramName,paramValue);
            return this;
      }
      
      /**
      * Add parameters to provided ActionForward
      * @param forward ActionForward to add parameters to
      * @return ActionForward with added parameters to URL
      */
      public ActionForward forward(ActionForward forward){
            StringBuffer path=new StringBuffer(forward.getPath());
            Iterator iter=params.entrySet().iterator();
            if(iter.hasNext()){
               //add first parameter, if avaliable
                  Map.Entry entry=(Map.Entry)iter.next();
                  path.append("?"+entry.getKey()+"="+entry.getValue());                  
               //add other parameters      
                  while(iter.hasNext()){
                        entry=(Map.Entry)iter.next();
                        path.append("&"+entry.getKey()+"="+entry.getValue());
                  }
            }
            
            return new ActionForward(path.toString());
      }      
}
.................................

and my life become much easier now :):
........................
            return new ForwardParameters().add("sysId","4")
                                          .add("id","5")
                                          .add("some","value")
                                          .forward(mapping.findForward("success"));
......................

Thans Tim.
Top Expert 2004

Commented:
Woo!  Nice wrapper :-)

I think  I'll use that too :-)  Woo!

Good luck!!

Tim

Author

Commented:
have a nice week :)