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

第二个问题:

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






 

 

 

 

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

这是最普遍的业务逻辑,

 

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

说明:

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

情况三:

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

 

大概意思是 如果你要拷贝当前的 action 属性到当前 chain 上的 action ,你需要应用 Chaining 拦截器,该拦截器会拷贝请求上的 parameters value 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 方式对于完成这种业务很方便,官方提示我们谨慎使用,过度使用会造成程序的代码混乱,到时还是根据业务来决定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值