У меня есть следующая форма аутентификации в JSF, работающая на Glassfish 3:
<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)]
(На самом деле я искал перевод в Google, поскольку реальное сообщение, которое я получил, было на португальском:
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)]
)
Что я делаю не так?
Заранее спасибо!