struts2.11中的chain与store

s2sh中 result的返回类型使用type="chain"时,发现两个action只共享request请求,
因此即使校验失败也会执行input中配置的action
 
而后一个action并不共享前一个action的actionError,actionMessage等信息!


使用store拦截器,返回类型为redirecAction时,两个action可以共享actionMessage,actionError
使用<s:debug></debug>标签可以查看堆栈中的内容     
 

 

Store只存储action级别的Message和Error

  <interceptor-stack name="myStack">

 

            <interceptor-ref name="defaultStack" /> 

           <interceptor-ref name="store">  

                 <param name="operationMode">AUTOMATIC</param>  

           </interceptor-ref> 

</interceptor-stack>

 

  放到defaultStack前面,当action校验失败时  <result name="input" type="redirectAction">updatePUser?user.id=${user.id}</result>不会执行配置的action

 

  若放到defaultStack最后面,当action校验失败时,<result name="input" type="redirectAction">updatePUser?user.id=${user.id}</result>仍会执行action,但会丢失fieldError。

 

当校验失败时,返回页面后,既要得到原来的数据,又要得到验证信息,解决办法:prepare接口及拦截器的配合使用,即重新定义拦截器

 

			<interceptor-stack name="myStack">
				<interceptor-ref name="auth"></interceptor-ref>
				<interceptor-ref name="stack_noprepare"></interceptor-ref>
			</interceptor-stack>
			
			
			<interceptor-stack name="fullStack">
				<interceptor-ref name="prepare"></interceptor-ref>
				<interceptor-ref name="myStack"></interceptor-ref>
				
			</interceptor-stack>

 或者使用ajax技术

 

 


你可能感兴趣的:(Ajax)