Vou direto ao ponto: quero abrir uma página home.xhtml após clicar no botão de login de uma página login.xhtml. Entretanto, só posso abrir a página home.xhtml se o login estiver válido, sendo que possuo uma tabela users com as colunas (id - username - password) e a página login.xhtml possui inputs de texto que pegam o username e a password da tabela. Aqui segue o meu arquivo XHTML e minha managed bean.
ManagedBean - UserBean:
private String nome;
private String senha;
private SessionManager sessionManager = new SessionManager();
public UserBean() {
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public void loginUser() {
// Gostaria de fazer a lógica de login aqui.
}
Já resolvi. Agora ficou uma outra dúvida: como eu faço pra utilizar a String que eu botei no input do username na página home.xhtml? Eu só quero inserir uma mensagem dizendo “Bem-vindo, <usuário>!”.
Poste a resolução, para ajudar outros usuários que tiverem o mesmo problema que o seu. Assim, além de você ser ajudado, você ajuda outros posteriormente.
Eu utilizei um segundo Managed Bean (ex. UserLoggedInfo, nome que dei a esse segundo MB) que recebia as informações do primeiro Managed Bean (isto é um Injection, em outras palavras).
Managed Bean principal (UserBean):
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name="userBean")
@SessionScoped
public class UserBean {
private String nome;
private String senha;
public UserBean() {}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public void registerUser() {
//regras de negócio do register
}
public boolean loginUser() {
//regras de negócio do login
}
}
Como eu fiz o outro Managed Bean para acessar o campo? Simples:
Managed Bean UserLoggedInfo:
package br.com.benoit.application.managedbean;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
@ManagedBean (name = "userLoggedInfo")
@ViewScoped //necessita desta anotação
public class UserLogedInfo {
//Aqui você diz que utilizara as propriedades do outro managedbean.
@ManagedProperty(value="#{userBean}")
private UserBean userBean;
public UserBean getUserBean() {
return userBean;
}
public void setUserBean(UserBean userBean) {
this.userBean = userBean;
}
}
E como utilizar na View? Faça da seguinte forma:
View (ou tela) login.xhtml:
<!-- Omitindo as outras tags (espera-se que tenha conhecimento delas)-->
<!-- ATENÇÃO, ESTOU UTILIZANDO JSF COM IMPLEMENTAÇÃO PRIME FACES -->
<h:body>
<h:form>
<p:panel header="Insira o nome de usuário e senha para validar o login:">
<h:panelGrid>
<p:outputLabel>Insira o nome do usuário:</p:outputLabel>
<p:inputText value="#{userBean.nome}" />
</h:panelGrid>
<h:panelGrid>
<p:outputLabel>Insira a senha do usuário:</p:outputLabel>
<p:inputText value="#{userBean.senha}" />
</h:panelGrid>
<!-- Aqui estará o botão que é o gatilho para o método de login -->
<h:panelGrid>
<p:commandButton value="Entrar"
actionListener="#{userBean.loginUser}"/>
</h:panelGrid>
</p:panel>
</h:form>
</h:body>
E para utilizar a propriedade no outra tela, utiliza-se:
View (ou tela) home.xhtml:
<!-- Omitindo as outras tags (espera-se que tenha conhecimento delas)-->
<!-- ATENÇÃO, ESTOU UTILIZANDO JSF COM IMPLEMENTAÇÃO PRIME FACES -->
<h:body>
<p:outputLabel value="Bem-vindo, #{userLogedInfo.userBean.nome}!"></p:outputLabel>
</h:body>
Obrigado ao colega @smatt por ter me alertado.
SE VOCÊ FICAR COM ALGUMA DÚVIDA, POR FAVOR ME MANDA UMA MENSAGEM, ESTAREI GRATO EM AJUDÁ-LO.