关于struts2中No result defined for action这个异常的解决思路

昨天晚上俺想到有一个功能没做,就想做一下!由于这个功能以前做过,很快就写出来了,于是就部署,debug tomcat!但是在测试的时候,却总是报No result defined for action异常,检查了一个小时,而且把以前写的代码夜拿出来对照,还是没有发现错误原因,只能放弃!今天早上起床就开始上Google搜这个,虽然网上很多这样的错误,但是看了好多都没能解决这个问题,所以就按照网上的帖子先加了一个result中name为input的结果:
<result name="input">/WEB-INF/page/error/error.jsp</result>
,还在error.jsp中加了一个
<s:debug></s:debug>
代码,由于对struts2掌握的也不太好,从debug的stacktrace中也没看出什么,所以只能继续上Google搜,然后再在自己的代码中修修补补,发现按要执行的manage/store/storeType_online(使用了通配符)中在StoreAction中的online方法竟然没只能,而是执行的该类的另一个方法
public String getStoreDetail() {
store = storeService.find(storeid);
return "storedetail";
}
由于没有传递storeid这个参数,就报了错误,所以俺把上述方法注释掉了,这个时候再做测试,进入了error.jsp页面,从堆栈中没看出啥问题。又到网上以“struts2 方法没执行”搜,在[url]http://blog.csdn.net/gavin812428144/archive/2010/03/27/5422220.aspx[/url]页面中看到了如下文字
今天提交表单时发现action中的execute()方法没有执行,但是validate()却执行了,而且并没有报任何错,执行完之后,就直接退出了,程序并没有进入execute()。

几经调试,发现validate()返回的resultCode为INPUT,说明并没有通过验证。究竟是什么原因导致验证不通过呢?!郁闷了半天,最后突然想起,我所提交的表单中有个type="file"的input,即我是准备上传文件的,然而我忘了将form的enctype属性改成"multipart/form-data"。貌似找到了问题,赶紧重试,结果果然如预料的,正是这个问题导致了表单提交失败,execute()未被执行。

如果大家遇到类似问题,不妨看看你的form的enctype,希望此次经历对大家有用。
,才知道INPUT的结果是没有通过验证的返回结果(基础没掌握好,就是浪费时间)。所以怀疑是form提交的数据没有通过struts2默认的验证,只能再上Google搜,找到了这个页面[url]http://blog.csdn.net/yby0260/archive/2010/08/18/5822312.aspx[/url]:
当我们在使用struts2自带的验证框架来验证表单字段时,需要在页面上显示错误提示信息,一般我们是在页面上添加<s:fielderror/>标签。而<s:fielderror/>会解析成<ul><li><span>error message</span></li></ul>的形式,这样一来错误信息的显示就只能显示在验证字段的上方或者下面,而我们需要的往往是将错误信息显示在验证字段的右边。
,于是就将<s:fielderror/>加到error.jsp 页面上,这才看到错误信息,原来是storelist.jsp中的一个隐藏input
<input type="hidden" name="currentPage" value="${currentPage}"/>
的值验证无效,所以看了一下以前的代码发现没有value="${currentPage}"属性,所以去掉该属性后,再测试,正常。终于解决了,不容易......
总结一下:遇到No result defined for action的问题的时候,首先看是不是validate的问题,在action中,设置断点,看执行了没有(注意,要使用debug,tomcat必须以debug方式启动,建议在开发的时候都是以debug方式启动),再加一个INPUT的返回结果看看,在相应的页面中输出验证信息。如果不是validate的问题,再看页面元素中有重命名时,但后台action类的对应的接收此同名参数的是变量而没有写成数组,也可能是路径的问题......
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值