Struts2中namespace的用法

293人閱讀評論(0)收藏舉報

Struts2中namespace的用法
   Struts2中關於Action的namespace在很多地方出現,如struts.xml、form標籤等等,有些莫名其妙的錯誤就是由於 namespace設置錯誤造成的。如無法找到匹配的Action,訪問不了result指定的頁面等等。

    namespace的作用是定義訪問Action的url,在不同的namespace中可以定義同名的action,不同的包可以共享同一個 namespace,可以通過namespace控制action的訪問。

    第一個問題,在<s:form>標籤中如何指定namespace,是否必須指定namespace。

    如果你訪問的jsp路徑與action的namespace重合,那麼並不需要指定namespace,struts2會首先自動尋找跟你jsp路徑相同 的namespace,如果沒有會尋找默認namespace。

    如果form標籤中沒有指定namespace,那麼會使用jsp路徑作爲namespace,在struts.xml中尋找action。如果form 標籤中指定了namespace,那麼直接使用指定的namespace查找action。

    例子:

    訪問URL="http://localhost:8080/struts2/test1/test1.jsp",中"/test1"爲Web應用程序下 的訪問路徑,如果在test1.jsp中的form標籤中沒有指定namespace,那麼默認action的namespace爲"/test1",如 果test1.jsp中設置了form標籤的namespace<s:form namespace="/mySpace"/>,那麼action的namespace則爲"/mySpace"。

    第二個問題,在struts.xml的<package>標籤中如何指定namespace

    在<package>中指定了namespace,不僅爲action提供了namespace,也同時規定了result返回結果的路徑。 在result中可以使用絕對路徑和相對路徑對返回結果進行配置,絕對路徑以"/"開頭,代表了Web應用程序上下文的根目錄,相對路徑不以"/"開頭。 絕對路徑不受Action的namespace影響,而相對路徑則以Action的namespace爲根路徑。

   P.S. 在result返回結果時,如果採用默認namespace,並且返回結果在根目錄下,也請使用絕對路徑,不要使用相對路徑。否則當form中的 namspace無法匹配struts.xml中的namespace,那麼會在默認namespace中找,如果找到的result返回結果採用相對路 徑,那麼會使用form中的namespace作爲根路徑繼續訪問。

   例子:

   jsp1中<s:form action="test1" namespace="mySapce"/>,jsp1訪問路徑爲http://localhost:8080/jsp1,而struts.xml 中不存在namespace爲mySpace的action,那麼當訪問jsp1時,返回的結果爲http://localhost:8080 /mySpace/jsp1

發佈了23 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章