首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts2 表單流程進階:巢狀 POJO 屬性自動填充與驗證流程分析

     編輯:Java 相關知識

前言

Struts2 支援巢狀 POJO 屬性綁定,將表單欄位對應到 Action 內部物件的屬性(如 user.username),使架構更清晰,利於多層開發。

範例架構

  • User.java:封裝 username、password。
  • login2.jsp:<s:textfield name="user.username"/>
  • LoginAction2:含 User user 屬性及 getter/setter。
  • validate():驗證 user.username、user.password 長度。

控制台輸出完整追蹤

*********getUser()*************   // 1. 取得 User 實例(若無則新建)
********setUser()***********      // 2. 呼叫 setUser() 準備注入
******setPassword()*********      // 3. 真正設定 password
*********getUser()*************   // 4. 再次取得 User 實例
*******setUsername()********      // 5. 真正設定 username
******validate()******            // 6. 執行驗證
******getUsername()******         // 7. 驗證時讀取 username
******getUsername()******         // 8. 第二次讀取(內部邏輯)
******getPassword()*******        // 9. 驗證時讀取 password
******getPassword()*******        // 10. 第二次讀取
*****execute()******              // 11. 執行業務邏輯
******getUsername()******         // 12. 業務中讀取 username
******getPassword()*******        // 13. 業務中讀取 password
*********getUser()*************   // 14. 結果頁渲染前取得 User
******getUsername()******         // 15. 渲染 username
********getUser()*************    // 16. 再次取得 User
******getPassword()*******        // 17. 渲染 password

流程解析

  1. Struts2 透過 OGNL 表達式 user.username 導航,自動建立/取得 User 實例並呼叫 setter。
  2. 屬性填充完成後,自動呼叫 validate();驗證失敗返回 input 導回原頁顯示錯誤。
  3. execute() 執行業務邏輯,返回結果導向 success 頁面。
  4. 結果頁 (welcome.jsp) 以 <s:property value="user.username"/> 讀取並顯示。

優勢

  • 將表單資料封裝為領域物件,Action 更專注業務流程。
  • 便於單元測試:直接 new User 設值即可測試驗證邏輯。
  • 支援多層架構:User 可直接傳遞至 Service/DAO 層。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved