No result defined for action and result input
2012-11-13 21:52
309 查看
这是struts2的一个拦截器报的错误,当你的form中的数据有问题,比如说
<input type="text" name="bianliang" value="${bianliang}">
当 bianliang值为NULL时,又或者变量是int,long,double而值是字符串类型时,就出这个错了,所以你可以在当前页面加入以下标签
< div
style ="color:red"
>
< s:fielderror
/>
</ div
>
它就会显示拦截器的错误,并在struts的XML中对应action里加name为input的result,如<result
name="input">/error.jsp</result>
<result name="success">/into_prison/into_Prison_index.jsp</result>
你的Action中返回SUCCESS,但是实际运行中Action并没有返回SUCCESS而是出现了错误,返回INPUT,所以你要定义与INPUT对应的Result,你可以添加一个
<result name="input">/error.jsp</result>
让他把错误返回到该页面就可以了,查看修改一下就可以了
由于框架struts2拦截器的处理后,看似404的问题,其实不是简单的找不到路径的问题,我们不应该只是如上面简单地加上<result name="input">/error.jsp</result>,关键我们我弄清楚struts2的拦截机制到底做了什么处理。出现标题中的错误的根本原因在于struts2处理数据时类型转换失败。
具体解释如下:
struts2把请求的参数映射到action属性的工作由parameters拦截器负责,它是默认的defaultStack拦截器栈的一员。所有的请求参数都是String类型,但并非所有的action属性都是String类型,所以每一种非String类型的action属性都需要对相应的请求参数进行类型转换。parameters拦截器使用了OGNL API来达到这一目的。准确地说,它就是ognl.OgnlRuntime类,这个类又依赖于java
反射。对每一个需要被设置的属性,OgnlRuntime将为之创建一个java.lang.reflection.Method对象,并调用它的invoke方法。
当然类型转换不总是成功,因为用户输入的数据可能无法转换为对应的action属性。
重点来了:如果类型转换失败了,struts2为我们准备了什么样的解决方案呢?
在因为类型转换失败而发生错误时,struts不必停下了,它有两种选择,具体选择哪一种将取决于你的action类是否实现了com.opensymphony.xwork2.ValidationAware接口。
如果某个action类没有实现ValidationAware接口,struts在遇到类型转换错误时仍会继续调用其动作方法,就好像什么问题都没有发生那样。
如果某个action类实现ValidationAware接口,struts在遇到类型转换错误时将不调用其动作方法:struts将检查相关action元素的声明是否包含一个input结果。如果是,struts将把控制权转交给那个result元素;如果找不到这样的结果,struts将抛出一个异常。这就是为什么有时候会抛出如题的异常的原因。
<input type="text" name="bianliang" value="${bianliang}">
当 bianliang值为NULL时,又或者变量是int,long,double而值是字符串类型时,就出这个错了,所以你可以在当前页面加入以下标签
< div
style ="color:red"
>
< s:fielderror
/>
</ div
>
它就会显示拦截器的错误,并在struts的XML中对应action里加name为input的result,如<result
name="input">/error.jsp</result>
<result name="success">/into_prison/into_Prison_index.jsp</result>
你的Action中返回SUCCESS,但是实际运行中Action并没有返回SUCCESS而是出现了错误,返回INPUT,所以你要定义与INPUT对应的Result,你可以添加一个
<result name="input">/error.jsp</result>
让他把错误返回到该页面就可以了,查看修改一下就可以了
由于框架struts2拦截器的处理后,看似404的问题,其实不是简单的找不到路径的问题,我们不应该只是如上面简单地加上<result name="input">/error.jsp</result>,关键我们我弄清楚struts2的拦截机制到底做了什么处理。出现标题中的错误的根本原因在于struts2处理数据时类型转换失败。
具体解释如下:
struts2把请求的参数映射到action属性的工作由parameters拦截器负责,它是默认的defaultStack拦截器栈的一员。所有的请求参数都是String类型,但并非所有的action属性都是String类型,所以每一种非String类型的action属性都需要对相应的请求参数进行类型转换。parameters拦截器使用了OGNL API来达到这一目的。准确地说,它就是ognl.OgnlRuntime类,这个类又依赖于java
反射。对每一个需要被设置的属性,OgnlRuntime将为之创建一个java.lang.reflection.Method对象,并调用它的invoke方法。
当然类型转换不总是成功,因为用户输入的数据可能无法转换为对应的action属性。
重点来了:如果类型转换失败了,struts2为我们准备了什么样的解决方案呢?
在因为类型转换失败而发生错误时,struts不必停下了,它有两种选择,具体选择哪一种将取决于你的action类是否实现了com.opensymphony.xwork2.ValidationAware接口。
如果某个action类没有实现ValidationAware接口,struts在遇到类型转换错误时仍会继续调用其动作方法,就好像什么问题都没有发生那样。
如果某个action类实现ValidationAware接口,struts在遇到类型转换错误时将不调用其动作方法:struts将检查相关action元素的声明是否包含一个input结果。如果是,struts将把控制权转交给那个result元素;如果找不到这样的结果,struts将抛出一个异常。这就是为什么有时候会抛出如题的异常的原因。
相关文章推荐
- No result defined for action and result input
- 关于struts2上传文件报错“No result defined for action and result input”
- No result defined for action com.zhaoonline.web.action.CreateBusinessCardAction and result input
- Struts2报错:No result defined for *action and result input
- 关于struts2上传文件报错“No result defined for action and result input”
- No result defined for action and result input
- 使用Struts开发报错“No result defined for action and result input ...”
- 随机出现“No result defined for action ....Action and result input”解决
- 解决 No result defined for action xxxAction and result input
- No result defined for action and result input
- No result defined for action and result input
- 表单提交时报错:No result defined for action com.ylj.action.BbsAction and result input
- struts2环境配置是出现No result defined for action *** and result input”的错误信息
- No result defined for action app.sys.exammgr.action.PaperAction and result input
- No result defined for action XXX and result input
- HTTP Status 500 - No result defined for action com.action.goodsAction and result input
- No result defined for action com.h.action.SystemSave and result input
- 关于Struts2报"No result defined for action +(包名) and result input"的解决方法
- No result defined for action and result input
- struts2的No result defined for action 。。。。and result input 问题