Galera, pergunto aos mestres... eu estou fazendo o login dos usuários, quando o cara não consegue acessar (por erro de senha ou por não existir o usuário) eu retorno para login.xhtml e gero um erro no contexto do JSF.
Na minha página de login aparece a mensagem de erro, porém não está internacionalizada (como todo o restante da p[agina que está).
Eis o fonte do bean e da página. O resultado é que aparece na página de login é isso: loginError
Ele não substitui pela mensagem do bundle.
Bean:
package com.managedbean;
import static com.util.PasswordUtil.hashPassword;
import java.io.Serializable;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import com.model.entity.User;
import com.model.entity.facade.UserFacade;
@ManagedBean(name="accessControlBean")
public class AccessControlBean implements Serializable {
private static final long serialVersionUID = 1L;
private Logger logger = Logger.getLogger("com.managedbean.AccessControlBean");
private String username;
private String password;
@EJB
private UserFacade userFacade;
private final FacesContext facesContext = FacesContext.getCurrentInstance();
public void
setUsername(String username) {
this.username = username;
}
public String getUsername() {
return this.username;
}
public void setPassword(String
password) {
this.password = hashPassword(password);
}
public String getPassword() {
return this.password;
}
public String doLogin() {
User
u = userFacade.findUserByUsername(this.username);
if(u != null &&
u.getPassword().equals(this.password)) {
logger.info("User accepted");
this.facesContext.getExternalContext().getSessionMap()
.put("userAuthenticated", u);
return "/faces/home.xhtml";
}
else {
logger.info("User do not exists or incorrect password");
this.facesContext.addMessage(null,
new
FacesMessage(FacesMessage.SEVERITY_ERROR,
"loginError",
"loginError"));
return "/faces/login.xhtml";
}
}
public String doLogoff() {
logger.info("Log out user");
this.facesContext.getExternalContext().getSessionMap()
.remove("userAuthenticated");
HttpSession
session = (HttpSession)
facesContext.getExternalContext().getSession(false);
session.invalidate();
return "/faces/login.xhtml";
}
public
AccessControlBean() {
}
}
Página:
<?xml version="1.0"
encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="en" lang="en"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jstl/core">
<head>
<title>Notes</title>
</head>
<body>
<h:form id="login">
<h:panelGrid columns="2">
<h:outputLabel for="username" value="#{bundle.username}
:"
styleClass="labelLogin"
/>
<h:inputText id="username" value="#{accessControlBean.username}"
required="true"
styleClass="textField">
<f:validateLength minimum="4" maximum="20"
/>
</h:inputText>
<h:outputLabel for="password" value="#{bundle.password}
:"
styleClass="labelLogin"
/>
<h:inputSecret id="password" value="#{accessControlBean.password}"
required="true"
styleClass="textField">
<f:validateLength minimum="6" maximum="20"
/>
</h:inputSecret>
<h:commandButton id="action" type="submit"
value="#{bundle.access}"
action="#{accessControlBean.doLogin}"
styleClass="actionButton" />
</h:panelGrid>
<h:messages layout="table" showSummary="true"
showDetail="false" globalOnly="true"/>
</h:form>
</body>
</html>
Meu arquivo de bundle tem a entrada: loginError=Invalid user or password
Pela atenção, obrigado.
--
Best regards,
Jean J. Michel
* Sent from my cellphone, please forgive the lack of accents and punctuation marks ;)
My blogs:
http://www.jeanjmichel.blogspot.com and
http://www.anonymousbiker.wordpress.com
My Twitter:
http://twitter.com/jeanjmichel