Ajax 使用p:commandbutton成功登录JSF后重定向到主页面
我有以下代码:Ajax 使用p:commandbutton成功登录JSF后重定向到主页面,ajax,jsf,redirect,primefaces,Ajax,Jsf,Redirect,Primefaces,我有以下代码: <?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://
<?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>
以及管理登录会话的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());
}
}
如您所见,我为add callback参数设置了一个RequestContext,该参数在checkLogin中使用,checkLogin是在p:commandbutton
中的“oncomplete”事件中调用的函数,我处理该数据并设置一个splash元素,该元素隐藏在jQuery中,通知登录错误,我想做的是在登录成功重定向到主页的情况下,但是p:commandbutton无法做到这一点,我知道这个标签只通过ajax处理请求和请求,我真的需要它来处理带有结果数据的jQuery事件,我如何重定向到另一个页面
问候 最简单的方法是在服务器端登录方法中重定向请求-如何做 但是,如果您希望在客户端重定向,则可以在oncomplete方法中使用
window.location=where
一个提示——如果你真的想保护你的网站,考虑使用一个健壮的框架,比如Spring Security。< /P>
/*
* 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());
}
}