2014-09-12 213 views
0

以我JSF應用,這裏是我的形式的一部分的簡化版本:H:消息不顯示JSF消息

<h:form id="loginFormId"> 
    <h:panelGrid columns="3"> 
     <h:outputText value="Login :" /> 
     <h:inputText label="Login" id="loginId" /> 
     <rich:message for="loginId" ajaxRendered="true"/> 
     <f:facet name="footer"> 
      <a4j:commandButton value="OK" action="#{authentifierUtilisateurBean.authentifierUtilisateur}"> 
       <f:ajax execute="@form" render="@form" /> 
      </a4j:commandButton> 
     </f:facet> 
    </h:panelGrid> 
</h:form> 

這是我的管Bean方法authentifierUtilisateur()的簡化版本:

public String authentifierUtilisateur() { 
    try { 
     utilisateurEnBase = utilisateurDao.chercherParLogin(utilisateur.getLogin()); 
    } 
    ... 
    if (utilisateurEnBase == ....) { 
     message = new FacesMessage(FacesMessage.SEVERITY_ERROR, bundle.getString("authentifier.utilisateur.login.inconnu"),""); 
     FacesContext.getCurrentInstance().addMessage("loginFormId:loginId", message); 
    } 

我想根據authentifierUtilisateur()方法中發生的事情,將一個錯誤分配給與h:inputText相關的rich:message標記。 驗證器是不可能的,因爲將從數據庫傳遞結果的方法在authentifierUtilisateur()方法中運行。

當我嘗試上面的代碼時,頁面不會在h:inputText前面顯示消息。

如果我的形式插入,代碼

<rich:messages /> 

上面的按鈕如下(以s消息):

 <f:facet name="footer"> 
      <rich:messages /> 
      <a4j:commandButton value="OK" action="#{authentifierUtilisateurBean.authentifierUtilisateur}"> 
       <f:ajax execute="@form" render="@form" /> 
      </a4j:commandButton> 
     </f:facet> 

然後我可以看到消息所以我確信服務器將正確的消息發送給客戶端。 那麼爲什麼客戶端不在h:inputText前面顯示h:message? 託管Bean有什麼問題嗎?

addMessage("loginFormId:loginId", message) 

回答

0

一個FacesMessage由摘要和詳細信息,rich:message將默認顯示詳細信息。那是你要離開的那個人,所以沒什麼可顯示的。要麼填寫的細節或設置@ showSummary =「true」

+0

非常感謝。你指出我的錯誤。 – Philippe 2014-09-17 14:21:44

0

插入一個ID,H:panelGrid的即

<h:panelGrid columns="3" id="grid"> 

然後在Java代碼中嘗試這個

FacesContext.getCurrentInstance().addMessage("loginFormId:grid:loginId", message); 

讓我知道,如果這有助於

+0

謝謝你的幫助,但這不是我的錯誤的原因。馬凱爾的回答指出了我的錯誤。 – Philippe 2014-09-17 14:21:14