我已經在Glassfish 3運行在JSF以下驗證形式:H:與用於屬性信息元素在JSF不存在消息2
<h:messages globalOnly="true" errorClass="erro" />
<h:form id="form-login">
<h:outputText value="User" />
<h:message for="login-user" />
<h:inputText id="login-user"
value="#{authenticationBean.user}" showMessages="true" />
<h:outputText value="Password" />
<h:inputSecret id="login-password"
value="#{authenticationBean.password}" />
<h:commandButton id="Log in"
action="#{authenticationBean.logIn}" value="Autenticar-se" />
</h:form>
的authentication.logIn
方法是下面的一種:
public String logIn() {
user = userDAO.authenticate(user, password);
if (user != null) {
FacesMessage message = new FacesMessage("Welcome!");
message.setSeverity(FacesMessage.SEVERITY_INFO);
FacesContext.getCurrentInstance().addMessage(null, message);
return "ok";
} else {
FacesMessage message = new FacesMessage("Authentication failed");
message.setSeverity(FacesMessage.SEVERITY_ERROR);
FacesContext.getCurrentInstance().addMessage(null, message);
if ("".equals(user)) {
message = new FacesMessage("You need to give a user");
message.setSeverity(FacesMessage.SEVERITY_ERROR);
FacesContext.getCurrentInstance().addMessage(
"login-user", message);
}
return "fail";
}
}
我試圖顯示一個特定的消息,如果用戶登錄沒有給出,行<h:message for="login-user" />
。但它不工作,如果我點擊提交按鈕中的空用戶字段,<h:messages globalOnly="true" errorClass="erro" />
元素呈現"Authentication failed"
,但<h:message for="login-user" />
組件不會呈現我所期望的"You need to give a user"
文本。相反,它根本沒有提供任何信息。此外,下面的警告出現在日誌:
[lifecycle] WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=login-user[severity=(ERROR 2), summary=(You need to give a user), detail=(You need to give a user)]
(其實,我找了在谷歌的一些翻譯,因爲我得到了真正的消息是葡萄牙語:
INFO: WARN: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos.
sourceId=login-usuario[severity=(ERROR 2), summary=(You need to give a user), detail=(You need to give a user)]
)
我究竟做錯了什麼?
在此先感謝!
謝謝,BalusC!實際上,我使用全局消息很多,它們非常實用。但是,我仍然懷疑:我怎樣才能以編程方式獲取組件的此客戶端ID?我認爲在應用程序中對它進行硬編碼並不是很實際... – brandizzi 2011-02-28 01:46:29