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这个包。

 

   

posted on 2013-11-12 13:06  meetcomet  阅读(3491)  评论(0编辑  收藏  举报