No result defined for action
----
一、错误原因
这个错误可能是由很多原因引起的
1)可能是输入的变量为空值
输入的变量为空值,action会转到input里去,input又没有。错误。
2)配置文件写错了
二、输入的变量为空值
三、配置文件写错
我看了半天,我的action里面明明就有result的定义,但是无论我怎么改,运行到execute中return的时候,它死活找不到页面。
错误的:(按理说省略namespace不应该是错的,但是事实如此,我也无法啊。)
<package name="money" extends="struts-default"> <action name="transfer" class="com.meetcomet.action.transferAction"> <result name="input">/index.jsp</result> <result name="success">/welcome.jsp</result> <result name="error">/fail.jsp</result> </action> </package>
正确的:
就是命名空间的问题。
<package name="money" namespace="/" extends="struts-default"> <action name="transfer" class="com.meetcomet.action.transferAction"> <result name="input">/index.jsp</result> <result name="success">/welcome.jsp</result> <result name="error">/fail.jsp</result> </action> </package>
如果不写命名空间,默认的命名空间为"".
引用一段话:
默认的命名空间“ namespace="" ”, 根命名空间 “ namespace="/" ”。
<package name="test" extends="struts-default"> ,如果未指定命名空间,则命名空间默认为 “ namespace="" ”。
默认命名空间里的Action可以处理任何命名空间下的Action请求。例如,如果存在URL为/barspace/bar.action的请求,并且/barspace的命名空间下没有名为bar的Action,则默认命名空间下名为bar的Action也会处理用户请求。但根命名空间下的Action只处理根命名空间下的Action的请求,这是根命名空间和默认命名空间的区别。 命名空间只有一个级别。如果请求的URL是/bookservice/search/get.action,系统将先在/bookservice/search的命名空间下查找名为get的Action,如果在该命名空间内找到名为get的Action,则由该Action处理用户的请求;如果未找到,系统将直接进入默认的命名空间中查找名为get的Action,而不会在/bookservice的命名空间下查找名为get的Action 。
这段话是正确的。我一开始没有弄清楚name 和namespace的区别,访问的时候用的URL是"/money/transfer",没有设置namesapce,照常能访问。但是,找不到result的页面。如果设置了namespace的空间为namespace=“/money",则可用”/money/transfer"来访问。
name和namespace的区别
name 用来指定包的名称。包要名称干什么呢?我觉得好处是能让包能继承。比如<package name="test" extends="struts-default"> 这个就是继承了struts-default这个包。如果需要,可以继承test这个包。