On Fri, Oct 30, 2009 at 5:15 PM, Siddiq Syed <siddiq...@yahoo.com> wrote:
> > First off all Thank you so much Greg, You have been doing a great job!. And > you express things pretty clear, Which I may not. > Please bare with me for some more time. > > When I am doing a chain in the input, as show below > > <action name="saveInitConsiderationEval" > class="com.activity.EvaluateCaseAction" method="saveInitConsiderationEval"> > <interceptor-ref name="redirectInput"/> > <result name="success" type="redirect-action"> > determineCaseEvaluationType > </result> > <result name="input" type="chain"> > determineCaseEvaluationTypeForInput > </result> > </action> > > The action "determineCaseEvaluationTypeForInput" is again looking for the > input, in which case there is no input. > Yes I see there is no 'input' and this is the problem. The way the struts validation framework works is the validators set error messages if a validation fails and then the workflow interceptor checks to see if there are any errors and sets the result to 'input' if there are errors. So this is what is happening when you chain to action determineCaseEvaluationTypeForInput, you have errors so workflow is returning 'input', and this will happen before so your action method will never be called. This is how the validation framework works, if you want to use it you must supply 'input' result for any action that may have errors. One thing that may work for you is you don't have to hardcode the result destination you can use and expression like this: <result name="input" type="tiles"> %{myDestination} </result> and have your action supply a getMyDestination() method. but remember your action execute method will not be called so you would have to do all your logic in either prepare() or prepareInput() methods. If you can't do this then I don't see how you can use the struts validation framework, you would have to manage errors yourself and remove the workflow interceptor from your stack. > > <action name="determineCaseEvaluationTypeForInput" > class="com.activity.EvaluateCaseAction" > method="determineCaseEvaluationTypeForInput"> > <result name="guidelInitConsid" > type="tiles">editGuidelinesCaseEvaluation</result> > <result name="shrtsntcInitConsid" > type="tiles">editShortSentenceCaseEvaluation</result> > <result name="sscat2p1InitConsid" > type="tiles">editShortSentenceCaseEvaluation</result> > <result name="sscat2p2InitConsid" > type="tiles">editShortSentenceCaseEvaluation</result> > </action> > > <action name="determineCaseEvaluationType" > class="com.activity.EvaluateCaseAction" > method="determineCaseEvaluationType"> > <result name="guidelInitConsid" > type="tiles">editGuidelinesCaseEvaluation</result> > <result name="shrtsntcInitConsid" > type="tiles">editShortSentenceCaseEvaluation</result> > <result name="sscat2p1InitConsid" > type="tiles">editShortSentenceCaseEvaluation</result> > <result name="sscat2p2InitConsid" > type="tiles">editShortSentenceCaseEvaluation</result> > > </action> > ---- The question is pretty simple and in a simple view. > > I am displaying the JSP depend on the some string that action returns, When > validation happens(fails) I want to display the same jsp with the > validation > message and the values. > > I hope you got my last sentece. I got an alternate for this by setting the > request value in the getter and setter method of the view bean which is a > bad approach , I know !! -:( > > > Thanks > Siddiq. > > Greg Lindholm-2 wrote: > > > > 1) Your interceptor stack is fine. > > > > 2) Dale was simply pointing out a very common newbie mistake; when you > > specify an interceptor-ref in an action it will replace (not append) the > > interceptor stack. Since you hadn't shown what redirectInput was it was a > > possible source of error. Now you have shown it, we can see it is OK. > > (see > > #1) > > > > 3) Result type of Chain is still probably the answer for you. You say it > > didn't work but don't describe what that means and what exactly you > tried. > > (see note below) > > > > 4) You should not need to iterate over > > #session.RedirectMessageInterceptor_FieldErrors to get the errors from > the > > RedirectMessageInterceptor. This is not the way it is meant to be used, > > it's suppose to handle the messages automatically, that's the whole point > > of > > it. > > > > In order for RedirectMessageInterceptor to work properly you need to > > always > > include it in your interceptor stack on both the actions that generate > the > > messages and on the actions that get redirected to. This is explained in > > the doc and comments for RedirectMessageInterceptor. > > > > Note that the action that you redirect to, following a validation error, > > will always use the 'input' result since the presents of the error > > messages > > will cause the workflow interceptor to return a result of 'input'. You > > might want to read this over a couple times to make sure you get it. The > > action you redirect to will return a result of 'input' because the > > workflow > > interceptor sees that there are errors. (Maybe this is why you though > > chain > > wasn't working). > > > > You seem to have such an unusual configuration that you may have to > > develop > > your own solutions since the standard ones don't seem to work for you. > As > > I > > explained earlier, doing a redirect following a validation error is > almost > > always the wrong thing to do and the standard approach is to dispatch > back > > to the input page. > > > > > > On Fri, Oct 30, 2009 at 1:57 PM, Siddiq Syed <siddiq...@yahoo.com> > wrote: > > > >> > >> The interceptor mention is nothing but > >> RedirectMessageInterceptor( > >> http://glindholm.wordpress.com/category/struts-2/) > >> and I specified that in the strust.xml, > >> This interceptor is to preserve the error messages. > >> > >> <interceptors> > >> <interceptor name="redirectMessage" > >> class="com.interceptor.RedirectMessageInterceptor" /> > >> <interceptor-stack name="redirectInput"> > >> <interceptor-ref name="redirectMessage" > /> > >> <interceptor-ref > >> name="paramsPrepareParamsStack" /> > >> </interceptor-stack> > >> </interceptors> > >> I am iterating the session in the JSP and displaying the error > messages.. > >> > >> <s:if test="#session.RedirectMessageInterceptor_FieldErrors != null"> > >> <ul> > >> <s:iterator value="#session.RedirectMessageInterceptor_FieldErrors" > > >> <s:iterator id="id" value="value" > > >> <li><s:property value="id" /></li> > >> </s:iterator> > >> </s:iterator> > >> </ul> > >> <% > >> > session.removeAttribute("RedirectMessageInterceptor_FieldErrors"); > >> %> > >> </s:if> > >> > >> As I said my first attempt was to use Chain , but It was not working. > >> And I don't understand what Dale is saying , can you elaborate please. > >> > >> Dale -- you mean to say chain and interceptor doesnot go together. !! > -:( > >> > >> > >> Thanks > >> Siddiq. > >> > >> > >> DNewfield wrote: > >> > > >> > Greg Lindholm wrote: > >> >> The only other thing is your interceptor stack 'redirectInput' you > >> >> haven't > >> >> shown what it is. > >> > > >> > And note--specifying any interceptor(s) in the action causes the > >> > specified interceptor(s) to be the only ones used. > >> > > >> > -Dale > >> > > >> > --------------------------------------------------------------------- > >> > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > >> > For additional commands, e-mail: user-h...@struts.apache.org > >> > > >> > > >> > > >> > >> -- > >> View this message in context: > >> > http://old.nabble.com/Preserving-Messages-and-Garbage-values-Across-a-Redirect-in-Struts-2-tp26114968p26134455.html > >> Sent from the Struts - User mailing list archive at Nabble.com. > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > >> For additional commands, e-mail: user-h...@struts.apache.org > >> > >> > > > > > > -- > View this message in context: > http://old.nabble.com/Preserving-Messages-and-Garbage-values-Across-a-Redirect-in-Struts-2-tp26114968p26136963.html > Sent from the Struts - User mailing list archive at Nabble.com. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org > >