JSP 表單提交至 Struts2 Action 的 save() 方法,屬性對象為 null 拋出 NPE。
<input name="user.name" /> 對應 Action 中 User user 及 getUser()/setUser()。struts.xml 配置攔截器棧:必須包含 params 攔截器(默認 defaultStack 已含)。<constant name="struts.devMode" value="true" />,控制台輸出 Setting property 'user.name' to 'xxx' 日誌。save() 入口斷點,觀察 user 對象是否已注入。prepare() 方法:若實現 Preparable 接口,prepare() 中初始化對象可能覆蓋參數注入結果。
// 錯誤:prepare 中 new 覆蓋了 params 注入的對象
public void prepare() {
this.user = new User(); // 導致表單數據丟失
}
// 正確:僅在 user 為 null 時初始化
public void prepare() {
if (this.user == null) this.user = new User();
}
在 JSP 頁面加入 <s:debug></s:debug> 或臨時在 Action 打印 System.out.println("user=" + user),確認數據流向。