You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Letícia Álvares Barbalho <le...@gmail.com> on 2005/08/26 22:08:27 UTC
Smart forwarding with different input pages
Hello everyone,
I'm working with smart forwarding in my application. I have an action with
this mapping in struts-config:
<action path="/DeterminaColecao"
type="auge.action.DeterminaAction"
name="addDelUpdColecaoForm"
validate="true"
input="/pages/colecao/colecao.jsp">
scope="request" >
<forward name="add" path="/AddColecao.do"/>
<forward name="del" path="/DelColecao.do"/>
<forward name="upd" path="/UpdColecao.do"/>
</action>
The actions for which it forwards are configured like this one:
<action
path="/UpdColecao"
type="auge.action.UpdColecaoAction"
name="addDelUpdColecaoForm"
scope="request"
validate="true"
input="/pages/colecao/colecaoDados.jsp">
<forward name="success" path="/pages/colecao/colecao.jsp" redirect="true"/>
<forward name="error" path="/pages/erro.jsp"/>
</action>
As you can see, the second action has a different input page. It is because
is I have 3 actions to which I will forward and one of them has a different
input page. So, when the validator returns me an error, and returns me to
the input page specified at "DeterminaColecao", and not at the action
executed. I tried ommiting the "input" option at "DeterminaColecao", but
then it returns me an error instead of using the action input.
Is there any way my html:form could call the "DeterminaColecao" but use the
input page of the action to which it forwarded?
Thank you.
--
Letícia Álvares Barbalho
leticia.barbalho@gmail.com
Re: Smart forwarding with different input pages
Posted by Laurie Harper <la...@holoweb.net>.
Letícia Álvares Barbalho wrote:
> Hello everyone,
>
> I'm working with smart forwarding in my application. I have an action with
> this mapping in struts-config:
>
> <action path="/DeterminaColecao"
> type="auge.action.DeterminaAction"
> name="addDelUpdColecaoForm"
> validate="true"
> input="/pages/colecao/colecao.jsp">
> scope="request" >
> <forward name="add" path="/AddColecao.do"/>
> <forward name="del" path="/DelColecao.do"/>
> <forward name="upd" path="/UpdColecao.do"/>
> </action>
>
> The actions for which it forwards are configured like this one:
>
> <action
> path="/UpdColecao"
> type="auge.action.UpdColecaoAction"
> name="addDelUpdColecaoForm"
> scope="request"
> validate="true"
> input="/pages/colecao/colecaoDados.jsp">
> <forward name="success" path="/pages/colecao/colecao.jsp" redirect="true"/>
> <forward name="error" path="/pages/erro.jsp"/>
> </action>
>
>
> As you can see, the second action has a different input page. It is because
> is I have 3 actions to which I will forward and one of them has a different
> input page. So, when the validator returns me an error, and returns me to
> the input page specified at "DeterminaColecao", and not at the action
> executed. I tried ommiting the "input" option at "DeterminaColecao", but
> then it returns me an error instead of using the action input.
>
> Is there any way my html:form could call the "DeterminaColecao" but use the
> input page of the action to which it forwarded?
>
> Thank you.
You can't get exactly what you want, since that doesn't fit the processing
model. What happens is, your form submits to /DeterminaColecao and, since
you have validate="true", validation occurs before your action executes. If
validation succeeds, processing proceeds into your action and you can
forward to wherever you want. However, if validation fails, the /UpdColecao
action doesn't get called. At this point, there's no way for validator to
know where your action would have forwarded to had the /DeterminaColecao
action executed, so it can only forward to the current (/DeterminaColecao)
action's input page.
To do what you want (have /DeterminaColecao forward to different input
pages depending on what the next action would have been), you will need to
override validate() (calling super.validate() to invoke validator) and have
your /DeterminaColecao action perform the forwarding when validation fails.
Another option you may be able to use would be to turn off validation on
the /DeterminaColecao action and rely on validation in each of the actions
it forwards to. Since you're not specifying redirect="true" on the
forwards, the action you forward to will see the same request data as the
/DeterminaColecao action and can validate after the forward. That's only an
option if you don't mind /DeterminaColecao executing against invalid
inputs, though. If that's not acceptable you'll have to use option one.
L.
--
Laurie Harper
Open Source advocate, Java geek: http://www.holoweb.net/laurie
Founder, Zotech Software: http://www.zotechsoftware.com/
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org