Struts2 專案登入動作執行後無法正確跳轉至成功頁面,常見原因包括:struts.xml 中 result 路徑錯誤、namespace 不匹配、Action 類別未實作正確介面、攔截器棧缺失。
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="com.example.action.LoginAction" method="execute">
<result name="success">/home.jsp</result>
<result name="input">/login.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
namespace="/user",則訪問 URL 為 /user/login.action。預設 namespace="/" 對應根路徑。/ 開頭表示相對 Web 應用根目錄(/home.jsp),不以 / 開頭則相對當前 namespace。建議統一用絕對路徑。return "success"; 需對應 <result name="success">...。Action 介面或繼承 ActionSupport,提供 execute() 方法。| 現象 | 可能原因 | 解決 |
|---|---|---|
| HTTP 404 | result 路徑錯、namespace 不對、Action 未映射 | 檢查 struts.xml、啟用 devMode 看日誌 |
| 無限迴圈跳回登入頁 | validation 失敗回傳 input、攔截器攔截 | 檢查 validate() 邏輯、確認 input result 存在 |
| 表單參數為 null | 未繼承 ActionSupport、缺少 params 攔截器 | extends="struts-default"、提供 setter |