传智播客strus2源码解析~~~超NBstruts2错误提示后chain操作

来源:互联网 发布:ipad登陆淘宝卖家在哪 编辑:程序博客网 时间:2024/06/05 11:38

第二个问题:

先对strus2的默认拦截器原理说下






 

 

 

 

官方文档这两行最能表达我的意思,excludeMethods参数是设置该拦截器忽略哪些方法,下面反之。这简单原理相信您非常了解了,来看下我们这里出现的情况吧

这是最普遍的业务逻辑,

 

开始选中的被取消了,并且没有“用户名不能为空”的错误信息。

说明:

为什么会错误信息没了呢?同样经过validateworkflow拦截器后,跳转input试图,一但我们重定向,则strus2框架会为我们创建一个新的UserAction对象,则fieldErrorsUserBeanhobby数组都为null了,所以错误信息、开始选中的都显示不出来了。

情况三:

相信您已经有解决方案了,把input试图的type设为chain类型,chain类型的作用是,让该请求重新被拦截器拦截,好我们来修改:

 

大概意思是如果你要拷贝当前的action属性到当前chain上的action,你需要应用Chaining拦截器,该拦截器会拷贝请求上的parametersvalue stack传递到目标action,原始的action会保存valueStack,允许目标action访问前面所有actionvalueStack作用域上的属性,同样对于chainresult结果试图如jspvelocity界面同样可以访问这些属性。

=====================================================

所以当我们以chain方式访问registerUserUI.action,原先actionvalueStack上的fieldErrors同样被拷贝到当前UserAction对象fieldErrors字段里,在经过workflow拦截器后,又发现有错误,同样调用input试图,进而又去调用registerUserUI.action,经过workflow拦截器后,又发现有错误,又去调用input试图,进而递归调用。

现在该怎样解决呢?我们要做的就是,让他调用registerUserUI.action时被workflow拦截器拦截后,不再验证是否有错误,前面说到过excludeMethods参数,我们查看workflow拦截器

 

虽然chain方式对于完成这种业务很方便,官方提示我们谨慎使用,过度使用会造成程序的代码混乱,到时还是根据业务来决定。