我有以下代码:
<?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:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
<link href="res/css/login.css" rel="stylesheet" type="text/css" />
<title>Iniciar Sesión</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js" type="text/javascript"></script>
<script src="res/js/login.js" type="text/javascript"></script>
</h:head>
<h:body>
<div class="errorMsg">
<!-- Change this text based on the error message -->
<span>Ooops! Los datos de usuario ó contraseña son incorrectos! Inténtelo de nuevo.</span>
<a href="#" title="Close error message">✖</a>
</div>
<div class="wrapper">
<h:form id="formLogin">
<div class="loginBox">
<h2>Iniciar Sesión al panel de la diputación</h2>
<fieldset class="dataCapture">
<h:inputText id="usuario" value="#{loginBean.nombre}"></h:inputText><!--value="71946976D"-->
<h:inputSecret id="contrasena" value="#{loginBean.contrasena}"></h:inputSecret><!-- value="1234"-->
</fieldset>
<fieldset class="submission">
<input type="checkbox" name="rememberMe" id="rememberMe" />
<label for="rememberMe">Recordar contraseña</label>
<p:commandButton id="login" value="Iniciar Sesión" action="#{loginBean.logear()}" oncomplete="checkLogin(xhr, status, args)"/>
</fieldset>
</div>
<div class="forgotPassword">
¿Olvidaste tu contraseña? <a href="#" title="Click here to reset it.">Haz click para restablecerla.</a>
</div>
</h:form>
</div>
</h:body>
</html>
以及以下 javascript 函数login.js
:
function checkLogin(xhr,status,args){
if(args.usuariorol === -1){
$('.errorMsg').fadeIn(500).delay(5000).fadeOut(500);
}
else{
alert('correcto!');
document.getElementById("formLogin").action = "main.jsp";
document.getElementById("formLogin").onsubmit = "return true";
}
}
以及管理登录会话的 managedbean:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package app.bean;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import app.dao.UsuarioFacade;
import app.entity.Usuario;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import org.primefaces.context.RequestContext;
/**
*
* @author Tone
*/
@ManagedBean
@RequestScoped
public class LoginBean implements Serializable {
@EJB
private UsuarioFacade userFacade;
private String nombre;
private String contrasena;
public String getNombre() {
return nombre;
}
public String getContrasena() {
return contrasena;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setContrasena(String contrasena) {
this.contrasena = contrasena;
}
public void logear(){
Usuario u = userFacade.getUsuarioContrasena(nombre, contrasena);
JsonElement jsonElem;
JsonObject json = new JsonObject();
Gson gson = new Gson();
if(u==null){
jsonElem = gson.toJsonTree(-1);
}
else{
jsonElem = gson.toJsonTree(u.getCodigoRol().getCodigo().toString());
}
json.add("usuariorol", jsonElem);
RequestContext reqCtx = RequestContext.getCurrentInstance();
reqCtx.addCallbackParam("usuariorol", jsonElem.getAsInt());
}
}
如您所见,我设置了一个 RequestContext 用于添加回调参数,之后在 checkLogin 中使用,这是在“oncomplete”事件中调用的函数p:commandbutton
,我处理这些数据并设置一个隐藏的启动元素,jQuery 通知登录错误,好吧,我想做的是在登录成功的情况下重定向到主页,但 p:commandbutton 不能这样做,我知道这个标签只处理通过 ajax 的请愿和请求,我真的需要这样做带有结果数据的 jQuery 事件,如何重定向到另一个页面?
问候!