You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Paul Devalier <de...@hotmail.com> on 2002/03/01 16:32:22 UTC

nasty prob with action forwards, formbeans, http requests and submit() methods

I've got a nice little STRUTS app working by sticking to the path set by the 
community examples and keeping my views gray and skeleton-like. I'm digging 
STRUTS, my form beans are not volatile through various wizard-style screens, 
so now I move on to fleshing things out by prettyfacing the JSPs and 
retrieving data from session beans for presentation by the view.

Assumption 1: Now that I need onChange and onClick events in the JSP tags, I 
need to rely on calling the submit() method of the form. This means I need 
to remove all of my <html:submit> because of the problem mentioned by others 
on this list with name="submit" and "submit method not supported by this 
object".

Result: Good: the submit() method works and I can pass an action token 
either as a parameter of the request or as a hidden field via form bean 
property. Bad: My browser will not call the submit() method unless the URL 
of the request is *identical* to the URL of the source. So smile.jsp to 
smile.jsp works and I dispatch. faceSmile.do to smile.jsp or smile.jsp# 
fails because URLs differ and faceSmile.do or smile.jsp to faceFrown.do or 
frown.jsp fail. By *fail* I mean the submit() method *does not* call the 
perform() method of the smile action class (as verified through debugging 
console println).

Assumption 2: I need to call the action class of every JSP page and always 
forward to the action class instead of linking (href) to the JSP. This is 
necessary to properly populate collections, retrieve data from the business 
tier, etc. without resorting to scriptlets in the JSP. For example, every 
JSP forwards to a global forward like forward="face.Smile" my face.Smile 
forward paths to faceSmile.do and my faceSmile.do maps to face.jsp which 
contains an <html:form> whose action="faceSmile" and which uses the 
faceFormBean. This also solves my first problem because every link forwards 
to its own action class (smile.jsp links forward to faceSmile.do which 
matches the source URL).

Result: Good: Dispatching works, uses never see a jsp in the URL, my 
collections are populated in the action class and presented via the 
smile.jsp view. *Very Bad*: Every time I forward or call faceSmile.do, a new 
faceFormBean is instantiated, all properties are null (or default) and the 
methods in the action class attempting to get values from the faceFormBean 
get null. How do I control form bean recycling? What's going on? Does every 
call to a logical forward/action servlet generate a new request? I confirmed 
that the session id is constant.

Someone developing 4 or 5 tier apps must with STRUTS in the view and 
controller must have run into this problem! Can you help?

CONFIGURATIONS:
Tomcat 4.0/Struts 1.0/JDK1.3.1_02/JAXP1.01
Tomcat 4.0/Struts 1.0.2/JDK1.3.1_02/JAXP1.01
IBM Visual Age for Java 4.0 Enterprise with JTE and JAXP 1.0.1 nicely 
configured per help provided by many in this community (took a while 
though!)
Our target production environment is WebSphere 4 + Oracle 9i

Respectfully,
Paul Devalier


_________________________________________________________________
MSN Photos is the easiest way to share and print your photos: 
http://photos.msn.com/support/worldwide.aspx


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


RE: nasty prob with action forwards, formbeans, http requests and submit() methods

Posted by mike m <st...@wryse.com>.
See if setting scope="session" for face.Smile action helps.
Mike

-----Original Message-----
From: Paul Devalier [mailto:devalier@hotmail.com]
Sent: Friday, March 01, 2002 10:32 AM
To: struts-user@jakarta.apache.org
Subject: nasty prob with action forwards, formbeans, http requests and
submit() methods


I've got a nice little STRUTS app working by sticking to the path set by the
community examples and keeping my views gray and skeleton-like. I'm digging
STRUTS, my form beans are not volatile through various wizard-style screens,
so now I move on to fleshing things out by prettyfacing the JSPs and
retrieving data from session beans for presentation by the view.

Assumption 1: Now that I need onChange and onClick events in the JSP tags, I
need to rely on calling the submit() method of the form. This means I need
to remove all of my <html:submit> because of the problem mentioned by others
on this list with name="submit" and "submit method not supported by this
object".

Result: Good: the submit() method works and I can pass an action token
either as a parameter of the request or as a hidden field via form bean
property. Bad: My browser will not call the submit() method unless the URL
of the request is *identical* to the URL of the source. So smile.jsp to
smile.jsp works and I dispatch. faceSmile.do to smile.jsp or smile.jsp#
fails because URLs differ and faceSmile.do or smile.jsp to faceFrown.do or
frown.jsp fail. By *fail* I mean the submit() method *does not* call the
perform() method of the smile action class (as verified through debugging
console println).

Assumption 2: I need to call the action class of every JSP page and always
forward to the action class instead of linking (href) to the JSP. This is
necessary to properly populate collections, retrieve data from the business
tier, etc. without resorting to scriptlets in the JSP. For example, every
JSP forwards to a global forward like forward="face.Smile" my face.Smile
forward paths to faceSmile.do and my faceSmile.do maps to face.jsp which
contains an <html:form> whose action="faceSmile" and which uses the
faceFormBean. This also solves my first problem because every link forwards
to its own action class (smile.jsp links forward to faceSmile.do which
matches the source URL).

Result: Good: Dispatching works, uses never see a jsp in the URL, my
collections are populated in the action class and presented via the
smile.jsp view. *Very Bad*: Every time I forward or call faceSmile.do, a new
faceFormBean is instantiated, all properties are null (or default) and the
methods in the action class attempting to get values from the faceFormBean
get null. How do I control form bean recycling? What's going on? Does every
call to a logical forward/action servlet generate a new request? I confirmed
that the session id is constant.

Someone developing 4 or 5 tier apps must with STRUTS in the view and
controller must have run into this problem! Can you help?

CONFIGURATIONS:
Tomcat 4.0/Struts 1.0/JDK1.3.1_02/JAXP1.01
Tomcat 4.0/Struts 1.0.2/JDK1.3.1_02/JAXP1.01
IBM Visual Age for Java 4.0 Enterprise with JTE and JAXP 1.0.1 nicely
configured per help provided by many in this community (took a while
though!)
Our target production environment is WebSphere 4 + Oracle 9i

Respectfully,
Paul Devalier


_________________________________________________________________
MSN Photos is the easiest way to share and print your photos:
http://photos.msn.com/support/worldwide.aspx


--
To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
For additional commands, e-mail:
<ma...@jakarta.apache.org>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>