我有以下代码:
<?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>
login.js
中的以下javascript函数:
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中使用后,这是p:commandbutton
中“oncomplete”事件中调用的函数,我处理此数据并设置一个启动元素隐藏着jQuery通知登录错误,好吧,我想要做的是在登录成功重定向到主页但p:commandbutton不能这样做的情况下,我已经明白这个标签只处理请愿和请求通过ajax,我真的需要这个用于结果数据的jQuery事件,如何重定向到另一个页面?
问候!
答案 0 :(得分:2)
最简单的方法是在服务器端登录方法中重定向请求 - here's如何操作。
如果您想要在客户端重定向,那么您可以在不完整的方法中使用window.location=wherever
。
然而,一个提示 - 如果您真的想要确保您的网站安全,请考虑使用像Spring security一样强大的框架。