最近在做项目(用struts技术)的过程中,在一个Action类中重载了父类的execute方法,结果出现了意想不到的结果。情况是这样的:
这个Action类是继承DispatchAction,因为这个类很早之前就写好了,原以为这个Action类的逻辑比较单纯,就直接重载了execute。过了段时间,发现这个类要处理多个逻辑,然后就有在这个类里面加个方法B。写好之后,我在struts-config.xml文件中也配置好了,配置如下
<action path="/USERRIGHT1/DeepThreadAction"
type="com.china.shanzhai.club.client.deep.action.DeepThreadAction"
scope="request"
parameter="processID"
>
</action>
调用的时候通过"http://shanzhai.china.com/USERRIGHT1/DeepThreadAction.do?processID=B"来调用,但B方法中的输出语句就是没有在控制台输出来,根本就没有执行B方法。在仔细检查配置文件,都没有错,弄了好久也没找到结果。没办法,后来只好试试是不是因为这个类里面有execute方法的缘故。然后我就在execute方法中加入了一个System.out输出语句(配置文件没有改变),然后还是通过上面的url去调用,果然execute中的输出语句被打到了控制台了。 然后我就把这个execute方法给注释掉,仍用上面的url去调用(配置文件仍没有改变),结果发现B方法执行了。
原因终于找到了,就是因为这个类里面有execute方法的缘故(之前我也有想过是因为这个execute方法,但我觉得这个action类是继承的DispatchAction)。只要重载了execute,不论你的Action类是否是继承的DispatchAction,它都只会执行execute方法。所以以后大家要注意。