以我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)
非常感謝。你指出我的錯誤。 – Philippe 2014-09-17 14:21:44