从“No result defined for action and result input”到html代码规范

        公司官网后台中有一个功能点:单击单选按钮,提交form表单,查看某条信息的明细资料。在Chrome,FF浏览器下都运行正常,但是在IE8下,运行报错,跟踪后台日志,发送提示如下大概内容:

No result defined for action and result input……

        接下来,就开始一系列的问题排查:

1、可以肯定,不是服务端java代码的问题,因为chrome,FF可以正常运行。

2、也不是stuts-xxx.xml配置文件的问题,理由同上。

3、也非javascript脚本的问题,因为,提交该表单没有什么多余的动作,无非就是一句submit()

4、那问题多半是在html代码了。这个报错问题多半是因为表单数据,比如数据类型不一致,被struts默认的校验拦截器拦住,并返回值为“input"的result等。

但是日志内容不够明确,没法定位到具体错误信息。那么可以在struts的xml配置文件中,加入

<result name="input">your_page.jsp</result>

        并在本jsp页面中,加入如下代码:

<div style=”color:#F00;”>
  <s:fielderror />
</div>

        注:你的jsp页面中,可能有一些其它struts标签,导致报错。所以建议是新建一个jsp页面,然后,复制以上代码。


        通过以上方法,定位到了具体出错的表单元素select。


        那么,到底该select表单元素提交到后台后,不同的浏览器,其值又有何差异呢?只有找到答案,才能最终修改此bug.

接下来,通过在action的prepare()方法里设置断点(如果该action方法没有实现prepabe接口,那就无法直接这样调试。如果有实现该接口,而没有prepare方法,可以自己编写一下prepare方法),并查看提交的表单数据,发现下面的代码段,导致在不同的浏览器下,表单数据有差异:

<form>

     ……
     <select name="busiType">
           <option value>全部</option>
     </select>
     ……

</form>

        在IE下提交的表单,busiType的value的值是"全部";

        而在Chrome,FF下busiType的value的值是“”。

        而后台定义busiType的类型是Integer,所以在IE浏览器下,value="全部"显然会被struts的校验拦截器拦住

        (在此,也不得不感慨struts框架的成熟)

        解决方法,将

<option value>全部</option>

        改成

<option value="">全部</option>

        从以上问题,也提醒了自己,写html代码应该尽可能规范,以免导致在不同浏览器上的差异。而具体的html代码规范,对于本人,有待再学习整理!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值