Thanks to everyone for their help.  This is the LAST issue with this form -
that is a promise.

Because of all your help, I have managed to work out every previous issue I
was having with my beans.   However, by changing the scope to session a new
issue has come up that I would really appreciate your help with.

I've now run into a problem when the user cancels in the middle of the
transaction.  When the user cancels they are brought back to the beginning
of the webapp (HTML page served by Apache) where they select the fee they
are paying .  The problem occurs when I get to the form for the second time
and submit, if any fields are left blank on the second try, the bean still
has the previous values, so those are displayed. 

What I need to do is either cancel the session and start a new one when the
user clicks cancel (the cancel button calls a javascript which calls
location.href("link") and from what I understand I can't invalidate the
session from within the javascript).  Instead I would rather  "reset" the
bean if this is possible.  From the books I have the most I have seen is
that when leaving a field in an HTML form blank this will not overwrite the
existing value of the bean variable.  This must be handled separately -
usually by assigning default values to the bean variable.  I think I have
done this because during my declaration all variables set equal to null or
to empty String.

Basically what I am looking to do is once the HTML form is submitted, and
the call to CCProcess.jsp is executed (where I have my <jsp:setProperty>
tag), I want ALL bean variables over written. I thought that this is what is
happening when I use:

<jsp:useBean id="formBean" class="com.Greenwich.beans.FormBean"
scope="session"/>
<jsp:setProperty name="formBean" property="*"/>

But apparantley, when the field is left blank it isn't "writing" an empty
string back to the bean so the previous value is recalled.  I would like all
variables, blank and completed fields to be written back..  The only way I
could think to accomplish this is with a lot of code and addressing each
property separately, for example something to the effect of 

<jsp:setProperty name="formBean" property="*"/>
<% 
     if (request.getParameter("name") == null)  //or is it == ""
        formBean.setName("");
     if (request.getParameter("address") == null)
       formBean.setAddress("");
 .....
%>

I would imagine this would be work, but I would also imagine there is an
easier way and I'm hoping that someone here will know :)

Thanks!!!
Denise

Denise Mangano
Help Desk Analyst
Complus Data Innovations, Inc.


-----Original Message-----
From: Bill Barker [mailto:[EMAIL PROTECTED]] 
Sent: Friday, January 10, 2003 4:03 AM
To: [EMAIL PROTECTED]
Subject: Re: Java Bean Scope questions (a lengthy one)



"Denise Mangano" <[EMAIL PROTECTED]> wrote in message
5D83C44941AFD4118B6F0002B302984F438642@EXCHANGE_SERVER">news:5D83C44941AFD4118B6F0002B302984F438642@EXCHANGE_SERVER...
> Bill,
>
> Let me see if I understand this correctly.
>
> You are correct.  I use formBean throughout various pages, so I 
> understand the need for session scope.  However, when I call 
> CCSubmit.jsp, this is
the
> last page of my webapp so I think request scope for transaction is 
> appropriate(?).  It is not until I call CCSubmit.jsp that I want to 
> instantiate transaction and set some of the properties equal to 
> properties of formBean.  At that point the transaction bean is used to 
> submit to my payment processor and return information to CCSubmit.jsp.  
> Once
CCSubmit.jsp
> displays the returned information and the user has completed the 
> transaction, I no longer need the data stored in transaction...  The 
> user can either exit or go back to the home page to pay more fees if 
> they
decide
> to.
>
> Question #1: Correct me if I am wrong, but the way I understand it is 
> that even if the user decides to enter the app again and pay more 
> fees, at this point when the user reaches CCSubmit.jsp again, this is 
> a new request so transaction would be instantiated again even it is 
> the same session.

Exactly.

>
> You wrote:
> >>What I was pointing out is that any <jsp:setProperty ...> that is 
> >>nested
> within a <jsp:useBean ...> ... </jsp:useBean> acts as a first-time 
> initialization (sort of like a "constructor").  If the >>bean has 
> already been constructed, then it won't be called again.  To set the 
> property
every
> time, you need to place the <jsp:setProperty ...> tag outside of the 
> <jsp:useBean ...> tag.
>
> I understand what you are saying about using your suggested code to 
> set
the
> properties every time, and its making me think that this may be what I
need
> for formBean, not transaction.  When my user submits the form for the
first
> time, it calls CCProcess.jsp where formBean is instantiated 
> (setProperty tags are nested within the useBean tag and there is no 
> existing instance). Then if the data is not valid, they are brought to 
> Retry.jsp which
displays
> the errors for the offending fields.  Once that form is resubmitted, 
> again there is a call to CCProcess.jsp.
>
> Question #2:  Are you saying that since my scope is now "session",  in 
> CCProcess.jsp I should have the formBean setProperty tags outside of 
> the useBean tag? This way each time the form is submitted, the new 
> (and supposedly corrected) data gets written to the bean? (Which if I
understand
> this right this was happening previously and working correct but that 
> was because each time I call CCProcess.jsp it was a new request so the 
> bean
was
> always getting instantiated.)  I could see how this could be the cause 
> of
my
> current snag (which is a never ending Retry.jsp loop and select lists 
> not maintaining state), but I would like to hear back of whether or 
> not I am understanding this correctly.
>

Yes, you are understanding correctly.  I haven't seen much for formBean, so
I'm going to fake it: <jsp:useBean id="formBean"
class="com.complusdata.beans.FormBean"
scope="session" />
<%-- set all properties from the Request --%>
<jsp:setProperty name="formBean" property="*" />



> Thank you!!!
>
> Denise
>
>
> -----Original Message-----
> From: Bill Barker [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, January 09, 2003 1:56 AM
> To: [EMAIL PROTECTED]
> Subject: Re: Java Bean Scope questions (a lengthy one)
>
>
>
> "Denise Mangano" <[EMAIL PROTECTED]> wrote in message 
> 5D83C44941AFD4118B6F0002B302984F43863C@EXCHANGE_SERVER">news:5D83C44941AFD4118B6F0002B302984F43863C@EXCHANGE_SERVER...
> > Bill,
> >
> > I'm not sure what you mean.  The transaction Bean gets instantiated 
> > when I call CCSubmit.jsp.  That is the first time it is "mentioned" 
> > and CCSubmit
> is
> > only called once from Verify.jsp.  Is what you are saying 
> > effectively the same as:
>
> Taking a wild guess, I'm thinking that you want 'formBean' to have 
> scope="session", and 'transaction' to have scope="request".  This way, 
> 'formBean' stays around between pages, but 'transaction' only stays 
> around for the one request that it is needed.
>
> What I was pointing out is that any <jsp:setProperty ...> that is 
> nested within a <jsp:useBean ...> ... </jsp:useBean> acts as a 
> first-time initialization (sort of like a "constructor").  If the bean 
> has already
been
> constructed, then it won't be called again.  To set the property every
time,
> you need to place the <jsp:setProperty ...> tag outside of the
<jsp:useBean
> ...> tag.
>
> >
> > <jsp:useBean id="transaction" class = 
> > "com.complusdata.beans.Transaction"
> > scope="session" >
>
> This code will only be executed if there is *no* "transaction" in the 
> session (and the JSP page needs to create a new one.  If you have
previously
> called CCSubmit.jsp (or if you had any other page that used 
> "transaction") at any point with this session, it will be skipped.
>
> >   <jsp:setProperty name="transaction" property="email" 
> > value="<%=formHandler.getEmail()%>"/>
> >    ....
> > </jsp:useBean>
> >
> > Thanks.
> >
> > Denise Mangano
> > Help Desk Analyst
> > Complus Data Innovations, Inc.
> >
> >
> > -----Original Message-----
> > From: Bill Barker [mailto:[EMAIL PROTECTED]]
> > Sent: Wednesday, January 08, 2003 1:42 AM
> > To: [EMAIL PROTECTED]
> > Subject: Re: Java Bean Scope questions (a lengthy one)
> >
> >
> >
> > "Denise Mangano" <[EMAIL PROTECTED]> wrote in message 
> > 5D83C44941AFD4118B6F0002B302984F438636@EXCHANGE_SERVER">news:5D83C44941AFD4118B6F0002B302984F438636@EXCHANGE_SERVER...
> > > Wow someone read all of that!! ;)
> > >
> > > For Question #1:  I should have mentioned this before... I tried 
> > > to use session scope at one point (don't recall the exact reason 
> > > but I thought of it as an attempt to resolve a different problem).  
> > > When I set the scope to session, it caused problems with my form 
> > > validation. Currently if the
> > form
> > > is not validated, the user is brought back to Retry.jsp and error 
> > > messages appear next to the offending input field.  When I used 
> > > session scope, Retry.jsp would be reloaded, but the error messages 
> > > would not be displayed... Any thoughts on that?  I am going to go 
> > > back and attempt this again now that everything is working as it 
> > > should up to Verify.jsp and see if I stand corrected...
> >
> > You need:
> > <jsp:useBean id="transaction" class = 
> > "com.complusdata.beans.Transaction"
> > scope="session" />
> >   <jsp:setProperty name="transaction" property="email" 
> > value="<%=formHandler.getEmail()%>"/>
> > ....
> >
> >
> > Note the final '/>' on jsp:useBean.  The way that you had it 
> > originally,
> the
> > properties will only be set if the JSP page needs to create a new 
> > instance of "transaction".  If it finds one in the session already, 
> > the setters are skipped.
> >
> >
> >
> > >
> > > For Question #2 - that's exactly what I needed to know!!
> > >
> > > For Question #3 - hopefully I can get the session scope to work, 
> > > but then how would I program that button?  Would I just put 
> > > onClick="Retry.jsp" ?
> > >
> > > Tim, thank you so much for taking the time!!
> > > Denise :)
> > >
> > > -----Original Message-----
> > > From: Tim Moore [mailto:[EMAIL PROTECTED]]
> > > Sent: Tuesday, January 07, 2003 9:24 PM
> > > To: Tomcat Users List
> > > Subject: RE: Java Bean Scope questions (a lengthy one)
> > >
> > >
> > > > -----Original Message-----
> > > > From: Denise Mangano [mailto:[EMAIL PROTECTED]]
> > > > Sent: Tuesday, January 07, 2003 9:19 PM
> > > > To: 'Tomcat Users List'
> > > > Subject: Java Bean Scope questions (a lengthy one)
> > > >
> > > >
> > > > Question #1: Why does CCSubmit.jsp not have access to formBean 
> > > > properties. I am thinking this is because technically by 
> > > > submitting a form with an action of "CCSubmit.jsp" control isn't 
> > > > being forwarded to CCSubmit.jsp so the instance of formBean 
> > > > isn't forwarded.  The scope of formBean is request. Is that the 
> > > > correct scope to use?  **I need to have access to formBean 
> > > > properties from the moment it is instantiated to the moment the 
> > > > application has completed, but it has to be unique to each user of
the
> > > > webapp.**   How
> > > > could I accomplish this?
> > >
> > > That's exactly what session scope is for. :-) Request scope means 
> > > that the bean is gone at the end of the request (that is, when 
> > > Verify.jsp finishes rendering).  If you put it in session scope 
> > > you'll be set.
> > >
> > > > Question #2: Is it possible to use two beans within a single jsp 
> > > > page?  I would imagine that it is, and if so I believe once I 
> > > > gain access to formBean properties, my transaction properties 
> > > > will no longer be null. (I included some code below... is this 
> > > > legal?)
> > >
> > > Absolutely!  As long as they have different id attributes, you can 
> > > use as many beans as you like.
> > >
> > > > Question #3:  I include a button to give the option to go back 
> > > > and make changes.  If the user should desire to go back and make 
> > > > changes, control should be forwarded to Retry.jsp on button 
> > > > click. I need to program this button in a way so that when 
> > > > Retry.jsp is recalled it will still have access to formBean 
> > > > properties.How do I program this? My last attempt using 
> > > > <jsp:forward> cause Retry.jsp to load automatically when 
> > > > Verify.jsp was loaded (sorry again Noel
> > > > ;) ).
> > >
> > > As long as the bean is in session scope, you'll be able to access 
> > > it from any page the user accesses.
> > > --
> > > Tim Moore / Blackboard Inc. / Software Engineer
> > > 1899 L Street, NW / 5th Floor / Washington, DC 20036 Phone 
> > > 202-463-4860 ext. 258 / Fax 202-463-4863
> > >
> > > --
> > > To unsubscribe, e-mail: 
> > > <mailto:[EMAIL PROTECTED]>
> > > For additional commands, e-mail: 
> > > <mailto:[EMAIL PROTECTED]>
> >
> >
> >
> >
> > --
> > To unsubscribe, e-mail: 
> > <mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail: 
> > <mailto:[EMAIL PROTECTED]>
>
>
>
>
> --
> To unsubscribe, e-mail: 
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: 
> <mailto:[EMAIL PROTECTED]>




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

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

Reply via email to