Often parameters are sent over the wire as a group, think of a '<select
multiple="true"'. So, calls like requestParams.get(String) will return
an array (even when only one copy of a param is sent). So, just
reference the first index like this -

productCodes = new String[] {(String) requestParams.get("param1")[0],...

I'm pretty sure it's a primitive array, but it might be a more elegant
object. You can usually tell by the "[L."

On Sun, 2008-02-10 at 15:02 -0500, j alex wrote:
> Thanks , i didn't want to have the request parameters as javabeans within
> the Action because they are used only for one-time checks and based  on
> their values, some other Action properties are set. The parameter names
> could change later, and i didn't want that to affect  the Action.
> 
> Now, i tried the following to retrieve the params from ActionContext (did
> not implement ParametersAware or SessionAware)
> 
> Map requestParams = ActionContext.getContext().getParameters();
> 
> productCodes = new String[] {(String) requestParams.get("param1"), (String)
> requestParams.get("param2")},
> 
> This gives the following exception :
> 
> java.lang.ClassCastException: [Ljava.lang.String; incompatible with
> java.lang.String
> 
> can't figure what's going on here..
> 
> On Feb 10, 2008 2:10 PM, Dave Newton <[EMAIL PROTECTED]> wrote:
> 
> > --- j alex <[EMAIL PROTECTED]> wrote:
> > > HttpServletRequest request = ServletActionContext.getRequest();
> > > HttpSession session = request.getSession(true);
> > > if (null != request.getParameter("param1"))
> > > session.setAttribute("attr1" , true);
> > > else
> > > session.setAttribute("attr1" , false);
> > >
> > > This works, but we now have references to HttpServletRequest and
> > > HttpSession
> > > which goes against the S2 "POJO" action / testability benefits etc.
> > (even
> > > though i may not write a TestCase at all)
> > >
> > > What's the best way to do this, so that the Action remains independent
> > of
> > > http ?
> >
> > There are several ways to do this, depending on your needs.
> >
> > Request parameters are set on your actions if you have JavaBean-style
> > properties exposed via names the same as the parameter name. In the above
> > example you could have a String property named "param1" with its
> > associated
> > setter, setParam1(). Then you don't have to do *anything*; it's just set
> > (assuming you're using the default interceptor stack).
> >
> > This is pretty basic S2 functionality, so you might want to check out the
> > tutorials and guides on the S2 wiki [1,2].
> >
> > You can also access the request or session parameter maps by implementing
> > the
> > ParameterAware or SessionAware interfaces [3,4].
> >
> > You can also access the request or session parameter maps via the
> > ActionContext class using the getParameters() and getSession() methods,
> > avoiding all references to Servlet Spec-specific classes [5].
> >
> > The S2 wiki and the JavaDocs are your friends.
> >
> > Dave
> >
> > [1] S2 Tutorials: http://struts.apache.org/2.x/docs/tutorials.html
> > [2] S2 Guides: http://struts.apache.org/2.x/docs/guides.html
> > [3]
> > ParameterAware:
> > http://struts.apache.org/2.0.11/struts2-core/apidocs/org/apache/struts2/interceptor/ParameterAware.html
> > [4] SessionAware:
> >
> > http://struts.apache.org/2.0.11/struts2-core/apidocs/org/apache/struts2/interceptor/SessionAware.html
> > [5] ActionContext:
> > http://struts.apache.org/2.0.11/struts2-core/apidocs/com/opensymphony/xwork2/ActionContext.html
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to