簡體   English   中英

在JSF轉換/驗證機制之外的action方法中創建FacesMessage?

[英]Creating FacesMessage in action method outside JSF conversion/validation mechanism?

我目前正在從核心jsf 2.0 book + glassfish + cdi學習jsf 2.0。

我想問一個關於使用bean-validation-framework處理未在jsf頁面或托管/命名bean中定義的驗證的問題。 我腦子里有這些層次:

  • 1)ui tier / jsf頁面
  • 1.5)jsf托管/命名bean(我使用1.5,因為我認為它仍然與jsf層緊密耦合,如支持bean)
  • 2)業務邏輯層(從jsf stuffs / imports中清除,只做純業務邏輯的東西)
  • 3)持久層

我想象層1.5(jsf bean)初始化和調用第2層(業務邏輯對象),在調用業務方法時提供參數,獲取結果,將結果填充到jsf bean屬性中,以便ui可以正確呈現。

令人好奇的是,第2層(業務邏輯對象)可以對提供的參數進行驗證,或者驗證數據等,並且可能拋出異常或錯誤對象。

我想我可以處理異常並獲取層1.5(jsf托管bean)中的錯誤對象,但是我應該如何在呈現的頁面中顯示錯誤? 我似乎無法從我正在閱讀的書中找到它,但我希望有一種方法來創建一個全局錯誤消息,並以某種方式可以將它注入某個地方,以便它由標記呈現?

謝謝 !

您可以使用FacesContext#addMessage()以編程方式將FacesMessage添加到上下文中。

FacesContext facesContext = FacesContext.getCurrentInstance();
FacesMessage facesMessage = new FacesMessage("This is a message");
facesContext.addMessage(null, facesMessage);

將客戶端ID參數設置為null ,它將成為全局消息。 您可以使用<h:messages />顯示和過濾它們

<h:messages globalOnly="true" />

globalOnly="true"將僅顯示具有null客戶端ID的消息。

但是,您也可以指定特定的客戶端ID。

facesContext.addMessage("formid:inputid", facesMessage);

然后這個將結束

<h:form id="formid">
    <h:inputText id="inputid" />
    <h:message for="inputid" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM