又是chain

情况是这样的:有一个名称为CreateIcon的action,这个action的作用是上传一个图片文件并创建一个图标,如果图标创建成功则返回SUCCESS的result code,如果由于各种原因创建失败则返回ERROR的result code,这个action返回后,会将控制权移交给同一个chain中另一个名称为ListCategory的action,并能过javascript的alert()方法弹出一个创建成功与否的对话框。这里的chain由chain interceptor和chain result共同作用而成。

但当我在测试的时候上传一个6m左右大小的文件的时候,古怪的问题随之而来,创建失败的对话框适当的弹了出来,但ListCategory这个action的execute方法并没有执行,悲哀的是,弹出js对话框由ListCategory这个action返回的页面实现的。这就是说:控制权已经移交到ListCategory了,只是ListCategory的execute方法并没有执行,这是怎么一回事呢?查了一下log,有一条有趣的记录,意思是说:在ListCategory这个action里并没有result和INPUT这个result code对应,遍寻整个模块所属的x-work.xml文件,确实没有与INPUT这个result code对应的result,而且整个模块所有的action都没有返回INPUT的。这个INPUT到底是那里在那里返回的呢?

查了很多资料,最后在webwork的wiki里发现了Workflow Interceptor的解释:

1. If the action being executed implements Validateable, the action's Validateable#validate() validate method is called.

2. Next, if the action implements ValidationAware, the action's ValidationAware#hasErrors() hasErrors method is called. If this method returns true, this interceptor stops the chain from continuing and immediately returns Action#INPUT

我的action是继承了ActionSupport类,而ActionSupport同是实现了Validateable的。于是当上传的文件超出了webwork设置的大小的时候(在webwork.properties里可以设置),Workflow Interceptor自动返回了INPUT。

解决方法,很简单,把chain Interceptor放到栈底,然后在CreateIcon的映射文件中增多一个INPUT的result映射,这样就可以使整个流程得到正确执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值