Boa tarde prezados,
Ao executar um <f:ajax> do jsf está abrindo em um alert o seguinte erro:
serverError: Class javax.faces.el.EvaluationException
segue minha página:
<!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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>LOGIN</title>
<meta name="robots" content="noindex, nofollow" />
<!-- <link rel="stylesheet" type="text/css" href="css/login.css" ></link> -->
<link href='http://fonts.googleapis.com/css?family=Dosis:200;400,600,800' rel='stylesheet' type='text/css'></link>
<link rel="icon" type="image/png" href="../tpl/images/upico.png"></link>
<script type="text/javascript" src="../jsc/jquery.js"></script>
<!-- <script type="text/javascript" src="jsc/login.js"></script> -->
<script type="text/javascript">
function functionName(data) {
var status = data.status; // pode ser "begin", "complete" ou "success".
var source = data.source; // O elemento pai HTML DOM.
// alert('functionName '+status);
// alert('functionName '+source);
switch (status) {
case "begin": // Antes da solicitação do Ajax é enviada.
{
$('.loginbox h1 img').fadeIn('fast');
break;
}
case "complete": // Após a resposta do Ajax é chegado.
{
$('.loginbox h1 img').fadeOut('slow');
break;
}
// case "success": // Depois de actualização do DOM HTML com base na resposta do Ajax.
// {
// alert('OK');
// break;
// }
// case "error":
// {
// alert('Error ao chamar o servidor!');
// break;
// }
}
}
</script>
</h:head>
<h:body>
<h:outputStylesheet library="css" name="login.css" />
<div class="loginbox">
<h1>Efetuar Login: <img src="img/loader.gif" alt="Carregando" title="Carregando" /></h1>
<h:form name="login">
<label class="label">
<span class="field">Usuário:</span>
<h:inputText name="user" id="login" value="#{autenticadorBean.login}"/>
<!-- <input type="text" name="user" id="login"/> -->
</label>
<div class="label">
<span class="field">Senha:</span>
<!-- <input type="password" name="pass" class="pass" id="senha" value="#{autenticadorBean.senha}"/> -->
<h:inputSecret name="pass" class="pass" id="senha" value="#{autenticadorBean.senha}"/>
<h:commandButton value="Logar-se" class="btn" action="#{autenticadorBean.autentica()}"> <f:ajax onevent="functionName" />
</h:commandButton>
</div>
</h:form>
<div class="msg"><p class="erro">Erro ao logar! Dados não conferem!</p></div><!--/msg-->
<div class="msg"><p class="aviso">Informe seu usuário e senha!</p></div><!--/msg-->
<div class="msg"><p class="sucesso">Login efetuado, aguarde...</p></div><!--/msg-->
</div><!--/login-box-->
<a class="backsite" href="index.xhtml" title="Voltar ao site">voltar ao site</a>
</h:body>
</html>
Meu filtro:
package br.com.ribas.autenticacao;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebFilter(servletNames = { "Faces Servlet" })
public class ControleDeAcesso implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
System.out.println("filtrando.....");
if ((session.getAttribute("USUARIOLogado") != null)
|| (req.getRequestURI().endsWith("index.xhtml"))
|| (req.getRequestURI().contains("javax.faces.resource/"))) {
//redireciona("/Logado.xhtml", response);
System.out.println("passou filtro..");
chain.doFilter(request, response);
}
else {
System.out.println("errooo filtro..");
redireciona("index.xhtml", response);
}
}
public void init(FilterConfig filterConfig) throws ServletException {
}
public void destroy() {
}
private void redireciona(String url, ServletResponse response)
throws IOException {
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect(url);
}
}
E minha autenticação de teste:
package br.com.ribas.autenticacao;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import br.com.ribas.util.SessionUtil;
@RequestScoped
@ManagedBean
public class AutenticadorBean implements Serializable {
private static final long serialVersionUID = 1L;
private String login;
private String senha;
public String autentica() {
System.out.println("autentica..");
System.out.println("login: "+ login + " senha: "+ senha);
if (login.equals("admin")&&senha.equals("admin")) {
System.out.println("Confirmou usuario e senha ...");
//ADD USUARIO NA SESSION
Object b = new Object();
SessionUtil.setParam("USUARIOLogado", b);
return "/inc/header.xhtml?faces-redirect=true";
} else {
System.out.println("Erroo Senha..");
return null;
}
}
/**
* M�todo que efetua o logout
*
* @return
*/
public String registraSaida() {
//REMOVER USUARIO DA SESSION
System.out.println("registraSaida..");
return "/index.xhtml?faces-redirect=true";
}
// GETTERS E SETTERS
public String getSenha() {
return senha;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public void setSenha(String senha) {
this.senha = senha;
}
}
Se eu tirar o
<f:ajax onevent="functionName" />
do
<h:commandButton value="Logar-se" class="btn" action="#{autenticadorBean.autentica()}">
Ele funciona mas preciso executar esse método javascript,
alguém consegue me ajudar?