Hi Greg,
Creating a variable in the action , seems not working.
Here are the steps that i have done.
step 1. Create a variable considTypeCode in the action , and so is getter
,setter.
step 2. Create a prepare() method in the action, which sets the value of the
considTypeCode to determine what will be the next page to display if
validation fails.
step 3. a) specify ${} in struts.xml file 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="redirect-action">
determineCaseEvaluationTypeForInput
</result>
</action>
<action name="determineCaseEvaluationTypeForInput" >
<interceptor-ref name="redirectInput"/>
<result name="input" type="tiles">${considTypeCode}</result>
</action>
In this case it is throwing the below mention exception
javax.servlet.ServletException:
org.apache.tiles.definition.NoSuchDefinitionException:
b) specify %{} in strust.xml file as show below
<action name="determineCaseEvaluationTypeForInput" >
<interceptor-ref name="redirectInput"/>
<result name="input" type="tiles">%{considTypeCode}</result>
</action>
In this case it is throwing the below mention exception
javax.servlet.ServletException:
org.apache.tiles.definition.NoSuchDefinitionException:%{considTypeCode}
In the debug mode , I can see the values of the considTypeCode and even I
kept a hidden variable in the JSP that can assign the value again, I donno
where the value is missing.
If I keep type="chain" then an recursion excpetion is throw.
Caused by: Infinite recursion detected:
[/rating/saveInitConsiderationEval!saveInitConsiderationEval,
/rating/determineCaseEvaluationTypeForInput,
/rating/determineCaseEvaluationTypeForInput] - [unknown location]
Any idea where I might have went wrong ?
Thanks
Siddiq.
Greg Lindholm-2 wrote:
>
> On Fri, Oct 30, 2009 at 5:15 PM, Siddiq Syed <[email protected]> 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 <[email protected]>
>> 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: [email protected]
>> >> > For additional commands, e-mail: [email protected]
>> >> >
>> >> >
>> >> >
>> >>
>> >> --
>> >> 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: [email protected]
>> >> For additional commands, e-mail: [email protected]
>> >>
>> >>
>> >
>> >
>>
>> --
>> 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: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>
>
:confused:
--
View this message in context:
http://old.nabble.com/Preserving-Messages-and-Garbage-values-Across-a-Redirect-in-Struts-2-tp26114968p26157771.html
Sent from the Struts - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]