You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by "Fickes, Vic" <vi...@exchange.prb.net> on 2001/02/24 20:30:13 UTC

RE: perform() called twice + possible v1b1 bug

To answer the question, I'm using IE5.5.

However, I discovered the immediate problem, which turns out to be simple,
but then it gets complicated again.

First off, the double posting appears to be caused by specifying both an
action attribute on the form tag and an onClick attribute on the submit tag.
For example:

<html:form action="/test.do?action=Cancel">

<html:submit property="store" value="Store"
 
onClick="performAction(this.form,'/test.do?action=Store')"/>

I am using the JavaScript function I found an archive listing regarding how
to set multiple actions in a form....
function performAction(theForm, theAction)
{
    theForm.action = theAction;
    theForm.submit();
}

As you can see, both "actions" also specify an "action" parameter, the same
as is used in the struts-example application.  The wierd thing, though, is
that the action parameter specified in the action attribute of the form tag
is ignored.  That is, there are 2 postings but both times the action
parameter takes on the value given in the onClick action.   If I remove the
onClick attribute, I get 1 posting with the action parameter taken from the
form's action attribute.

The obvious thing to try then, would be to remove the form's action
attribute and just use the submit's onClick attribute.  However, this causes
an exception (at least in my WLS5.1SP8 environment), which complains that
the "required" action attribute is missing.  I don't understand this because
the action attribute isn't required in the struts-form tld.  Why is this
happening?

Anyway, the above observations were based on using the struts build from 14
Feb.
So then I decided to try the V1 beta 1 build.

The results are very similar except that now the form's action attribute
does NOT set the action parameter at all.  That is, if I remove the submit's
onClick attribute, there is only 1 posting, but the action parameter does
not get defined (request.getParameter("action") returns null).  This is a
bug isn't it?  If I go back to setting both the form's action attribute  and
the submit's onClick attribute, I get 2 postings and the action parameter is
set from the onClick.

I hope I explained this cleary enough.  Whether or not the problem with the
form's action attribute is a bug, I'd still like to know if there is a way
to use the onClick attribute without getting a double posting.

Regards,
Vic


> -----Original Message-----
> From:	Neal Kaiser [SMTP:neal@makeastore.com]
> Sent:	Saturday, February 24, 2001 10:33 AM
> To:	struts-user@jakarta.apache.org
> Subject:	RE: perform() called twice
> 
> This is a little out-there, but, by any chance are you using Netscape 6
> and Frontpage for your JSP editor?
> 
> I found a bug in Netscape 6 that causes a page to be submitted twice (when
> actually pressing it once) if there are certain Frontpage META tags in
> your
> page.
> 
> The solution for us was to remove the frontpage meta tags it
> auto-generates.
> 
> One way to tell would be by doing a tail on your access_log file. If you
> see
> two
> requests, then that might be the problem.
> 
> Neal
> 
> > -----Original Message-----
> > From: Anand Raman [mailto:anand.raman@mymailbag.com]
> > Sent: Saturday, February 24, 2001 6:58 AM
> > To: struts-user@jakarta.apache.org
> > Subject: Re: perform() called twice
> >
> >
> > Hi Vic
> > The action perform method is called once for every submission..
> >
> > When u hit the submit button the ActionFromBean is populated and then
> > the controller passes on the control to the Action class perform
> > method.
> >
> > U then return any appropriate action forward method from the same
> > perform method .
> >
> > I am not sure why u get 2 calls to the perform method.. Maybe posting
> > sections of code can help..
> >
> > Anand
> >
> > On Fri, Feb 23, 2001 at 01:38:18PM -0500, Fickes, Vic wrote:
> > >Hi,
> > >I am trying to understand the sequence of events that take
> > place using a
> > >simple test <html:form>.  When the form's action is
> > submitted, it causes the
> > >Action.perform() method to be called twice in the same
> > request.  I thought
> > >it might have something to do with the forward that is returned from
> > >perform() so I returned null, and it still does it.  Is this
> > the expected
> > >behavior?  I don't think this is happening in the example
> > application, so it
> > >must be something I am doing, but I can't figure out what.
> > Any ideas would
> > >be appreciated.
> > >Thanks,
> > >Vic
> >

Re: perform() called twice + possible v1b1 bug

Posted by Anand Raman <an...@mymailbag.com>.
maybe one simpe solution.. Why dont you use a simple button instead on a
html submit button.. I think that will simplify ur case as it once did
for me..

Hope this helps
Anand
On Sat, Feb 24, 2001 at 02:30:13PM -0500, Fickes, Vic wrote:
>To answer the question, I'm using IE5.5.
>
>However, I discovered the immediate problem, which turns out to be simple,
>but then it gets complicated again.
>
>First off, the double posting appears to be caused by specifying both an
>action attribute on the form tag and an onClick attribute on the submit tag.
>For example:
>
><html:form action="/test.do?action=Cancel">

Re: perform() called twice + possible v1b1 bug

Posted by "Craig R. McClanahan" <Cr...@eng.sun.com>.
Vic,

Not including the query parameter at the end of <html:form action="..."> sounds
like a definite bug.  Could you please post a bug report to our bug tracking
system:

    http://nagoya.apache.org/bugzilla/

with your test case, so that we make sure it gets attention?

Thanks,

Craig


"Fickes, Vic" wrote:

> To answer the question, I'm using IE5.5.
>
> However, I discovered the immediate problem, which turns out to be simple,
> but then it gets complicated again.
>
> First off, the double posting appears to be caused by specifying both an
> action attribute on the form tag and an onClick attribute on the submit tag.
> For example:
>
> <html:form action="/test.do?action=Cancel">
>
> <html:submit property="store" value="Store"
>
> onClick="performAction(this.form,'/test.do?action=Store')"/>
>
> I am using the JavaScript function I found an archive listing regarding how
> to set multiple actions in a form....
> function performAction(theForm, theAction)
> {
>     theForm.action = theAction;
>     theForm.submit();
> }
>
> As you can see, both "actions" also specify an "action" parameter, the same
> as is used in the struts-example application.  The wierd thing, though, is
> that the action parameter specified in the action attribute of the form tag
> is ignored.  That is, there are 2 postings but both times the action
> parameter takes on the value given in the onClick action.   If I remove the
> onClick attribute, I get 1 posting with the action parameter taken from the
> form's action attribute.
>
> The obvious thing to try then, would be to remove the form's action
> attribute and just use the submit's onClick attribute.  However, this causes
> an exception (at least in my WLS5.1SP8 environment), which complains that
> the "required" action attribute is missing.  I don't understand this because
> the action attribute isn't required in the struts-form tld.  Why is this
> happening?
>
> Anyway, the above observations were based on using the struts build from 14
> Feb.
> So then I decided to try the V1 beta 1 build.
>
> The results are very similar except that now the form's action attribute
> does NOT set the action parameter at all.  That is, if I remove the submit's
> onClick attribute, there is only 1 posting, but the action parameter does
> not get defined (request.getParameter("action") returns null).  This is a
> bug isn't it?  If I go back to setting both the form's action attribute  and
> the submit's onClick attribute, I get 2 postings and the action parameter is
> set from the onClick.
>
> I hope I explained this cleary enough.  Whether or not the problem with the
> form's action attribute is a bug, I'd still like to know if there is a way
> to use the onClick attribute without getting a double posting.
>
> Regards,
> Vic
>
> > -----Original Message-----
> > From: Neal Kaiser [SMTP:neal@makeastore.com]
> > Sent: Saturday, February 24, 2001 10:33 AM
> > To:   struts-user@jakarta.apache.org
> > Subject:      RE: perform() called twice
> >
> > This is a little out-there, but, by any chance are you using Netscape 6
> > and Frontpage for your JSP editor?
> >
> > I found a bug in Netscape 6 that causes a page to be submitted twice (when
> > actually pressing it once) if there are certain Frontpage META tags in
> > your
> > page.
> >
> > The solution for us was to remove the frontpage meta tags it
> > auto-generates.
> >
> > One way to tell would be by doing a tail on your access_log file. If you
> > see
> > two
> > requests, then that might be the problem.
> >
> > Neal
> >
> > > -----Original Message-----
> > > From: Anand Raman [mailto:anand.raman@mymailbag.com]
> > > Sent: Saturday, February 24, 2001 6:58 AM
> > > To: struts-user@jakarta.apache.org
> > > Subject: Re: perform() called twice
> > >
> > >
> > > Hi Vic
> > > The action perform method is called once for every submission..
> > >
> > > When u hit the submit button the ActionFromBean is populated and then
> > > the controller passes on the control to the Action class perform
> > > method.
> > >
> > > U then return any appropriate action forward method from the same
> > > perform method .
> > >
> > > I am not sure why u get 2 calls to the perform method.. Maybe posting
> > > sections of code can help..
> > >
> > > Anand
> > >
> > > On Fri, Feb 23, 2001 at 01:38:18PM -0500, Fickes, Vic wrote:
> > > >Hi,
> > > >I am trying to understand the sequence of events that take
> > > place using a
> > > >simple test <html:form>.  When the form's action is
> > > submitted, it causes the
> > > >Action.perform() method to be called twice in the same
> > > request.  I thought
> > > >it might have something to do with the forward that is returned from
> > > >perform() so I returned null, and it still does it.  Is this
> > > the expected
> > > >behavior?  I don't think this is happening in the example
> > > application, so it
> > > >must be something I am doing, but I can't figure out what.
> > > Any ideas would
> > > >be appreciated.
> > > >Thanks,
> > > >Vic
> > >


RE: perform() called twice + possible v1b1 bug

Posted by Wes Hodges <wh...@fabgear.com>.
I see that someone suggested using just a button and that worked. I have
done
things simular in the past and found this to work.

The function you call on the onClick "preformAction" in this case needs to
return false.  This is because you are submitting the form in the method.
However if this method does not return false the browser will also submit
the form.

Wes

>
> <html:form action="/test.do?action=Cancel">
>
> <html:submit property="store" value="Store"
>
> onClick="performAction(this.form,'/test.do?action=Store')"/>
>
> I am using the JavaScript function I found an archive listing
> regarding how
> to set multiple actions in a form....
> function performAction(theForm, theAction)
> {
>     theForm.action = theAction;
>     theForm.submit();
> }
>
>