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這個包。