Struts2 异常 Could not find action or result

数据校验也是发生此类异常的原因之一,之一,之一。。。。


这篇日志的由来可参考《一个分号引发的奇怪故障》,在Tomcat服务器日志上发现如下异常信息:

Could not find action or result
No result defined for action com.szair.smartme.vender.action.QuotationAction and result input

百思不得其解,于是采用老办法,上网搜相关问题,无意中翻到下面一篇日志,顿时让我茅塞顿开:

————————————————————分割线——————————————————————

今天发现系统的一个统计图在同事电脑浏览器上没有显示,查看日志发现报出错误:
Could not find action or result
No result defined for action “xxxx”and result input

?又在别的同事电脑上看了下居然是正常的,找了好几台电脑查看都是正常的(浏览器用的都是IE8),这就奇怪了,后来在网上找到这篇博文“《今天做一个页面提交的功能时,用到了Json Plus插件,代码写好了,测试的时候一直都提示Could not find action or result No result defined for action com.ecmanager.action.EcEditAction and result input。以前那几个功能都是这样写的,都没有提示,现在反而却报找不到action或者result,心里很纳闷。调试的时候却能正确的执行类的构造函数,就是没有执行方法。

?后来翻资料说,Action的属性为空的时候,Struts2的默认拦截器会报错,报错的同时会需找input的result。但是我仔细检查了我的Action各个属性,没有存在会为空的现象,但是一想到既然Action的构造函数都已经执行了,却在执行方法的时候提示找不到input result,原因可能就是在解析属性的时候出现了异常,于是在页面中查看html代码,仔细的查看了各个属性的值,在一个隐藏域属性中,值定义的类型是long,可是隐藏域中的value值却是字符型,这就造成了隐藏域转换的时候出现了异常,才导致了Could not find action or result。原来找到了,那解决办法自然就有了...》”

跟我遇到的问题很相似,经过进一步检查代码发现 那个统计图的jquery请求 中传了一个“yyyy-MM-dd” 格式的字符串到action 中是直接拿date类型接收的,修改程序:把接收类型改为String 再在程序中转换为date,然后在那台发现问题的电脑上测试了下发现正常了 。郁闷!具体原因还没弄清楚。

猜测:是否是浏览器的某些设置导致传到后台的属性不可以被强制转换?

————————————————————分割线——————————————————————

原来也有人遇到类似的问题,我也是很疑惑,为什么有些供应商能正常使用“提交”按钮,有些就不行。上文说的日期字段,引起了我的注意,我页面提交的参数里也有一个日期类型(报价有效期),也是“yyyy-MM-dd” 格式,Action接收的字段是PO报价类的报价有效期属性,属性类型也是Date。

JSP:

??????????? <td align="right" style="white-space: nowrap;">报价有效期:</td>
?????????? <td><input id="quotation_expdate" style="width:117px;" name="quotation.quotation_expdate" class="Wdate"
???????????? οnfοcus="WdatePicker({minDate:'%y-%M-{%d}'})"/>

po类:

???????? ? private Date quotation_expdate;

猜测也是Action在初始转换数值类型时报错了,我的Struts配置文件又没有配置名为"input”的Result,虽然我在Action类的方法里有捕捉异常,但是在初始化Action还没执行该Action方法时就报错了。

??????????于是修改代码,设一个String类型变量接收报价有效期,再转换为Date型。更新线上系统,等待后续反馈结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值