Olá colegas do Fórum GUJ,
estou desenvolvendo uma aplicação web utilizando JSF 1.2 e Facelets. Estou criando uma sessão administrativa. Para isso tenho uma página login.xhtml que recebe o nome de usuário e senha e que utiliza um bean gerenciado chamado LoginController que verifica a existência desse usuário. Para que a o botão Entrar da página login.xhtml funcione é preciso instanciar um bean chamado de Login. Dá para fazer isso criando um link em uma outra página e esse link chamar a ação novoLogin da classe LoginController. Entretanto, gostaria de que o usuário tentasse entrar na área administrativa chamando a página login.xhtml direto do browser. Sem necessitar de um link. Só que quando tento fazer, é claro, o bean Login não é instanciado. Há como eu fazer isso? Permitir ao usuário que ele acesse a área administrativa direto do browser? Dá para instanciar o bean Login na hora que o usuário digitar o endereço do browser?
Abaixo está o código de login.xhtml, de LoginController e do bean Login.
<?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"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<body>
<ui:composition template="template_admin.xhtml">
<ui:define name="titulo">
Acesso a Área Administrativa
</ui:define>
<ui:define name="conteudo">
<div id="formlogin">
<fieldset>
<legend>Acesso a Área Administrativa</legend>
<table id="tabelalogin">
<tr>
<td>
Nome de usuário:
</td>
<td>
<input type="text" required="true" requiredMessage="O campo 'Nome de usuário' é obrigatório" name="nomeusuario" jsfc="h:inputText" value="#{loginC.login.nome_usuario}" />
</td>
</tr>
<tr>
<td>
Senha:
</td>
<td>
<input type="password" required="true" requiredMessage="O campo 'Senha' é obrigatório" name="nomeusuario" jsfc="h:inputSecret" value="#{loginC.login.senha}" />
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" name="enviar" value="Entrar" jsfc="h:commandButton" action="#{loginC.logar_action}"/>
</td>
</tr>
</table>
<br></br>
<br></br>
<h:messages />
</fieldset>
</div>
</ui:define>
</ui:composition>
</body>
</html>
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package biblioteca.gmf.web.controller;
import biblioteca.gmf.bd.bean.Administradores;
import biblioteca.gmf.bd.bean.Login;
import biblioteca.gmf.bd.dao.imp.AdministradoresDaoImp;
import javax.faces.application.ViewHandler;
import javax.faces.component.UIViewRoot;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
/**
*
* @author thiagoa
*/
public class LoginController {
private Login login;
public String novoLogin()
{
this.login = new Login();
return "login";
}
public Login getLogin() {
return login;
}
public void setLogin(Login login) {
this.login = login;
}
public String logar_action() throws Exception
{
try
{
AdministradoresDaoImp dao = new AdministradoresDaoImp();
if(dao.VerificarUsuarioSenha(login.getNome_usuario(), login.getSenha()) == true)
{
FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
//cria uma sessão contendo o nome de usuario chamada logado
session.setAttribute("logado", login.getNome_usuario());
//caso a sessão msg esteja com valor, a remove
if(session.getAttribute("msg") != null)
{
session.removeAttribute("msg");
}
return "logado";
}
}
catch(Exception ex)
{
//error("Login ou senha inválidos");
}
return null;
}
public String logout_action()
{
FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession)fc.getExternalContext().getSession(false);
//expira a sessão
session.invalidate();
return "logout";
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package biblioteca.gmf.bd.bean;
/**
*
* @author thiagoa
*/
public class Login {
private String nome_usuario;
private String senha;
public Login ()
{
}
public String getNome_usuario() {
return nome_usuario;
}
public void setNome_usuario(String nome_usuario) {
this.nome_usuario = nome_usuario;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
}