在Struts 2中,我看到根名稱空間給出與根名稱空間相同的行爲,即充當「全部捕獲」。我需要限制我的應用中的操作只能從一個URL訪問,包括URL中沒有命名空間的操作。我的理解是使用root命名空間應該這樣做,但我沒有看到它的工作。Struts 2:根名稱空間的行爲與默認命名空間相同
我可以用Struts 2教程的HelloWorld示例爲Eclipse提供here來重現此問題。
的struts.xml中包含
<package name="basicstruts2" extends="struts-default">
...
<action name="index">
<result>/index.jsp</result>
</action>
...
</package>
因此,無論以下鏈接顯示的index.jsp結果
- 本地主機:8080/Basic_Struts2_Ant/index.action
- 本地主機:8080/Basic_Struts2_Ant /foo/index.action
目前爲止還不錯。
如果我改變struts.xml中以
<package name="basicstruts2" namespace="/foo" extends="struts-default">
- 本地主機:8080/Basic_Struts2_Ant/index.action失敗 「沒有映射爲命名空間/和動作名稱指數的行動。」
- 本地主機:8080/Basic_Struts2_Ant /富/ index.action顯示 的index.jsp
也不錯。
現在,如果我改變支柱XML說
<package name="basicstruts2" namespace="/" extends="struts-default">
以下兩個鏈接顯示的index.jsp的結果(同樣在沒有命名空間的定義)
- 本地主機:8080/Basic_Struts2_Ant/index.action
- 本地主機:8080/Basic_Struts2_Ant /富/ index.action
如果我已經正確理解命名空間文檔,我期望 localhost:8080/Basic_Struts2_Ant/foo/index.action失敗,並顯示「沒有爲命名空間/ foo和動作名稱索引映射的操作」。
我也嘗試了其他變體,用「alksdja」等替換「foo」,以消除瀏覽器緩存的可能性。
我誤解了根名稱空間的作用嗎?以及如何禁用/foo/index.action工作,同時允許/index.action?
請參閱我對[此問題](http://stackoverflow.com/a/8424913/438992)的回答,看看它是否適合你。 – 2012-01-16 15:22:01
是的,這有效。謝謝! – Graham 2012-01-16 16:28:24
現在我正在閱讀有關所有設置,看起來struts.mapper.alwaysSelectFullNamespace或struts.enable.SlashesInActionNames將根據您想要的URL中間的額外東西來關聯它來修復它。 – Graham 2012-01-16 16:34:57