情况是这样的:有一个名称为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映射,这样就可以使整个流程得到正确执行。
但当我在测试的时候上传一个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映射,这样就可以使整个流程得到正确执行。