2

我有以下代码:

<?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">&#10006;</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 事件,如何重定向到另一个页面?

问候!

4

1 回答 1

2

最简单的方法是在您的服务器端登录方法中重定向请求 -这是如何做到的。

但是,如果您想在客户端重定向,那么您可以window.location=wherever在您的 oncomplete 方法中使用。

然而,一个提示 - 如果您真的想保护您的网站,请考虑使用像 spring security 这样的强大框架。

于 2013-05-20T19:25:21.910 回答