Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 使用p:commandbutton成功登录JSF后重定向到主页面_Ajax_Jsf_Redirect_Primefaces - Fatal编程技术网

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">&#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>
以及管理登录会话的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());
        }
    }