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技术