首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-08-31 
关于struts2中No result defined for action这个异常的解决思路昨天晚上俺想到有一个功能没做,就想做一下!

关于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  方法没执行”搜,在http://blog.csdn.net/gavin812428144/archive/2010/03/27/5422220.aspx页面中看到了如下文字
今天提交表单时发现action中的execute()方法没有执行,但是validate()却执行了,而且并没有报任何错,执行完之后,就直接退出了,程序并没有进入execute()。      几经调试,发现validate()返回的resultCode为INPUT,说明并没有通过验证。究竟是什么原因导致验证不通过呢?!郁闷了半天,最后突然想起,我所提交的表单中有个type="file"的input,即我是准备上传文件的,然而我忘了将form的enctype属性改成"multipart/form-data"。貌似找到了问题,赶紧重试,结果果然如预料的,正是这个问题导致了表单提交失败,execute()未被执行。      如果大家遇到类似问题,不妨看看你的form的enctype,希望此次经历对大家有用。
,才知道INPUT的结果是没有通过验证的返回结果(基础没掌握好,就是浪费时间)。所以怀疑是form提交的数据没有通过struts2默认的验证,只能再上Google搜,找到了这个页面http://blog.csdn.net/yby0260/archive/2010/08/18/5822312.aspx:
当我们在使用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类的对应的接收此同名参数的是变量而没有写成数组,也可能是路径的问题...... 1 楼 litao11046 2011-03-24   总结得挺好的,我遇到过这样的问题,后来发现是form的enctype属性写错了

热点排行