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

[size=medium]
[color=red]
我在遇到这个问题时(No result defined for action....input),这篇文章给了我一些启发,觉得文章有借鉴意义,便引用于此,作为笔记以便日后查阅。
[/color]
[url]http://www.cnblogs.com/aigeileshei/articles/5252319.html[/url]
[/size]
[quote]
昨天晚上俺想到有一个功能没做,就想做一下!由于这个功能以前做过,很快就写出来了,于是就部署,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类的对应的接收此同名参数的是变量而没有写成数组,也可能是路径的问 题......


我出现这个错误,仔细检查发现是form表单的一个input的name属性和action中的对应属性不一致,大小写问题导致的。

例子2:

我这个错事validate的问题,验证没通过,所以action自动return “input”,然后我没有定义<result name="input"></result>的页面,所以报404
[/quote]
[color=red]
[size=medium]我遇到这个问题时,也是jsp页面的input标签中某些value值的类型有问题。
[/size]
[/color]

<input id="pmbfkssj" name="led.ledBofangkaishishijian" type="time" value="08:00" class="form-control">
<input id="pmbfjssj" name="led.ledBofangjieshushijian" type="time" value="22:00" class="form-control">

[color=red][size=medium]上面代码中若将08:00和22:00分别改成08:00:00和22:00:00即可,可参照:[url]http://www.runoob.com/jsref/dom-obj-input-time.html[/url]中的示例[/size][/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值