專案昨晚測試正常,今早啟動卻報錯:There is no Action mapped for namespace [/] and action name [0]。但 struts.xml 中並無名為 "0" 的 Action,JSP 頁面也未發現請求 "0" 的路徑。
Could not find action or result /No2_Web/0
action name [0]
namespace [/]
context path [/No2_Web]
請求路徑 /No2_Web/0 中的 "0" 是關鍵線索——它不是 Action 名稱,而是被當作 Action 名稱解析的參數值。
A.jsp 中:
<iframe name="menu" src="user/menuhotlist.action" class="iframe_menu"></iframe>
若 menuhotlist.action 重定向到 /index_menu.jsp,而 index_menu.jsp 內部又包含相對路徑請求,可能導致路徑解析錯誤產生 "/0"。
檢查 B.jsp 中的表單隱藏域、JavaScript 動態生成的 URL、或 <a> 標籤的 href,是否有未預期的 id=0 或 menu.type=0 參數被 Struts2 的 REST 風格約定解析為 Action 名稱。
struts.xml 啟用了:
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
此設定允許 actionName!methodName 風格訪問,若前端誤傳 user/0 可能被誤識別。
menuhotlist.action → redirect:/index_menu.jsp → iframe 載入 → 內部二次請求false 測試是否消失clean install<action name="*" class="customer.CustomerControl" method="user_{1}">
<result name="input">/error.jsp</result> <!-- 添加 input 結果 -->
</action>
「0」極大概率來自前端動態生成的 URL 參數(如 id=0、type=0)被 REST 風格解析器誤判為 Action 名稱。重點檢查:menu.type 參數傳遞、iframe 載入後的二次請求、JavaScript 拼接 URL 邏輯。清理重新部署通常能解決快取導致的舊映射殘留問題。