<package name="user" namespace="/user" extends="struts-default">
<action name="logon" class="cn.net.cipe.ots.user.actions.UserAction" method="logon">
<result name="success">/JSP/main.jsp</result>
<result name="input">/JSP/login.jsp</result>
<result name="error">/JSP/login.jsp</result>
</action>
</package>
說明:
此user的意思是WebRoot下必須有一個名為user的文件夾。
那么如果在jsp里這樣三種寫法:
第一種
<form action="logon.action" >
.....
</form>
第二種
<form action="/user/logon.action" >
.....
</form>
第三種
<s:form action="logon.action" namespace="/user" >
.....
</s:form>
第一種寫法可以通過測試,原因是FilterDispatcher會去package的根目錄及下面的子目錄去搜logon這個action
第二種寫法是正規寫法,可以通過測試,因為FilterDispatcher把form的跳轉分解為logon.action和nanespace=/user,然后在package下直接命中namespace為"/user"的那個包。
第三種寫法,很不幸,不能通過測試,原因是s:form這個標簽居然不會在生成html頁面時候把namespace的值給加到form 的action屬性里面去。。。。。
那么與第三種情況正相反,如果你用s:url的話,一定要寫namespace,見下例:
<s:url href="/user/logon.action"/>這種寫法極容易出錯,原因是不寫namespace的話,產生html代碼時候很混亂
<s:url href="logon.action" namespace="/user"/>正確寫法!