2010-03-22 58 views
6

我學習JSF和跨越這條線進來:<h:messages>在JSF中做什麼?

<h:messages layout="table"></h:messages> 
在一個示例應用程序

我不確定這條線做什麼?從代碼中刪除行時,我沒有遇到任何錯誤,並且能夠運行它並獲得相同的輸出?

+0

我在示例代碼中出現的代碼行: bibek 2010-03-22 10:33:58

+0

我編輯了您的問題。使用Ctrl + K快捷鍵在問題/答案中編寫代碼。 – romaintaz 2010-03-22 10:55:14

+0

@romaintaz謝謝 – bibek 2010-03-22 11:37:10

回答

17

h:messages標記呈現當前JSF視圖的所有消息,這些消息不包含在h:message(標記爲缺失''的結尾)標記中。消息可以由支持bean(FacesContext.addMessage)或由JSF隱式生成。

E.g.如果您已根據需要標記輸入值,並且用戶未填寫所需值即提交表單,則會向視圖添加錯誤消息。如果h:message標籤綁定到相關組件,則該消息將在那裏呈現,否則將由視圖中的全局h:messages標記呈現(如果有)。

layout屬性指定要生成的HTML代碼應該是什麼樣子。 table佈局(在您的示例中使用)使用HTML表格來顯示消息,而list佈局使用項目符號列表(HTML ul標記)。

如果你不指定在你看來一個h:messages標籤,也沒有h:message標籤,用戶將不會被有關錯誤的通知。因此,最佳做法是爲視圖的每個輸入組件添加一個h:message標記,併爲您的整個視圖添加一個h:messages標記,以確保所有消息對用戶可見。

你會在JSF Toolbox找到一個小巧的JSF標籤參考。

+4

關於「呈現所有未包含的當前JSF視圖的消息」。我不認爲這是完全正確的。除了指定globalOnly =「true」之外,它將顯示所有消息。 – 2011-09-11 15:58:18

5

組件<h:message><h:messages>專用於向用戶顯示消息(通常爲錯誤消息)。

例如,當您對失敗的字段進行驗證(例如,用戶沒有填寫必填字段或在僅限數字字段中輸入字符串)時,FacesMessage將被添加到FacesContext目的。然後使用<h:message><h:messages>在頁面中顯示消息。

組件<h:messages>將顯示FacesContext中包含的所有消息,而<h:message>專用於特定clientId(特定字段)。例如,當你想把消息放在一個字段附近時,後者是有用的。

請注意,您可以添加任何類型的消息將顯示給用戶:

FacesContext.getInstance().addMessage(null, new FacesMessage("The message to display")); 

在這個例子中,第一個參數是由該消息有關領域的ID字段(有用的當該消息是特定字段的驗證消息)。 null表示該消息是一般信息(即,不鏈接到任何特定字段)。

您可以看到這個組件的例子here。請注意,此示例使用「基本」<h:message/>的擴展(由RichFaces提供)的rich:messages,但原理相同。