在我看到的教程中,在驗證表單后,我們希望使用 thymeleaf 在 html 頁面上顯示錯誤文本。為按順序顯示表單中多個欄位的錯誤而撰寫的代碼如下:
<ul>
<li class="alert alert-danger" role="alert" th:each="error : ${#fields.errors('contact.*')}" th:text="${error}"></li>
</ul>
此外,我們附加表單資訊的物件稱為聯系人。
現在我有一些問題:
什么是 #?什么是fields.errors?為什么 .* 在聯系結束時使用?如果這是一個正則運算式,如果我們從末尾洗掉 .*,它應該會顯示錯誤。但是如果我們不使用 .*,就不會顯示錯誤。為什么?
uj5u.com熱心網友回復:
“什么是#?什么是fields.errors? ”
不要將這兩部分分開。問題應該是“什么是#fields.errors? ”
Thymeleaf 有各種所謂的運算式實用程式物件,它們是以 . 開頭的值#。
它們基本上是 Thymeleaf 庫中的類,它們提供了您可能希望在模板中使用的一般有用的功能。
從這里的檔案中可以看到:
Thymeleaf 將為我們提供一組實用物件,幫助我們在運算式中執行常見任務。
但是對于#fields.errors,該物件#fields不是核心 Thymeleaf 庫的一部分。它是百里香春季方言的一部分。
Spring 的 Thymeleaf 版本(方言)在標準 Thymeleaf 的基礎上增加了許多增強功能。此增強功能旨在讓您更輕松地處理模板中的表單驗證錯誤。
Fields 您可以在此處查看 JavaDoc :
運算式物件,用于在 Spring 環境中的 Thymeleaf 標準運算式中執行與表單欄位相關的操作。
您還可以從 JavaDoc 中看到,此類Fields具有各種有用的方法來訪問 Spring 驗證服務提供的任何欄位驗證錯誤。
其中之一是:
public List<String> errors(String field)
“為什么.*要用結尾contact? ”
例如${#fields.errors('contact.*')},這是一個 Thymeleaf 運算式,它使用此#fields.errors方法訪問與contact物件中所有欄位關聯的所有錯誤訊息。
這里的*符號是“所有欄位”的通配符。
不要把它讀成.*- 一個正則運算式,意思是“任何字符,零一次或多次”。
將其讀取為點運算子 ( .),將物件名稱contact與欄位名稱(在本例*中為所有欄位)分開。
您可以替換*為單個欄位名稱 fromcontact以僅獲取該欄位的錯誤,而不是所有 ( *) 欄位。
因此,在您問題的示例中,Thymeleaf 運算式正在訪問錯誤訊息串列 -它使用List<String>的方法的回傳值。errors因此,它可以遍歷該串列中的訊息(如果有的話)。
這就是代碼所使用的th:each="error ...——使用標準的 Thymleaf 迭代邏輯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/505289.html
