首頁 >Java >java教程 >Struts 2 INPUT 結果:如何處理轉換和驗證錯誤,以及為什麼返回 INPUT 結果而不是異常?

Struts 2 INPUT 結果:如何處理轉換和驗證錯誤,以及為什麼返回 INPUT 結果而不是異常?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-03 03:30:09814瀏覽

Struts 2 INPUT Result: How are Conversion and Validation Errors Handled, and Why is an INPUT Result Returned Instead of an Exception?

Struts2 輸入結果:它是如何運作的?如何處理轉換/驗證錯誤?

主要問題

當輸入無效字串而不是數字時,它應該通過異常攔截器。在 Param Interceptor 期間,使用 Integer.parseInt 轉換為 int 類型應該會失敗,從而觸發 NumberFormatException。這個異常不應該被推入值棧嗎?為什麼儘管有錯誤,結果還是顯示出來?

附帶問題

在表單中輸入字母會導致顯示零。這是為什麼?

概念

Struts2 將轉換和驗證錯誤視為輸入錯誤而不是阻塞錯誤。它不會引發異常,而是傳回 INPUT 結果並通知使用者輸入不正確。

詳細工作流程

  1. 參數攔截器: 嘗試設定參數。如果在 devMode 中發生 RuntimeException(例如 NumberFormatException),則會將錯誤訊息新增至操作錯誤。否則,異常將被抑制。
  2. 轉換錯誤攔截器: 檢查轉換錯誤並為發現的任何錯誤添加欄位錯誤。它還保存原始值以便在後續請求中顯示它們。
  3. 驗證攔截器:執行請求的驗證並為不符合條件的欄位新增欄位錯誤。
  4. 工作流程攔截器: 檢查欄位錯誤。如果沒有找到,則鏈繼續。如果存在錯誤,則傳回 INPUT 結果。

補充問題解答

在原始答案中,由於檢索預設的 int 值而不是 String 輸入,轉換錯誤導致零。然而,轉換攔截器應該保存原始字串以便在後續請求中顯示它。

但是為什麼字串顯示為零而不是 abc?

問題是由 value 屬性引起的輸入組件。在 value 屬性中使用 getText() 或 getText() 會導致轉換問題。刪除 value 屬性或使用 %{myIntField} 可以解決問題。

結論

  • 確保攔截器堆疊已正確配置。
  • 檢查輸入中的 value 屬性元件。
  • 刪除 value 屬性以進行測試以驗證正確行為。

以上是Struts 2 INPUT 結果:如何處理轉換和驗證錯誤,以及為什麼返回 INPUT 結果而不是異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn