在Primefaces上注销之前咆哮

时间:2015-01-12 14:40:50

标签: java html primefaces

我建立了一个客户端,您可以登录,查看一些内容并注销。一切正常。如果你点击退出按钮,他会直接退出并将我发回我的登录页面。这会在单击注销按钮后直接发生。所以我希望在客户端将我发回我的登录页面之前添加大约3秒的等待时间。另外我想添加一个咆哮弹出消息,就是说:"你正在退出..."。 问题是,客户端在发回给我之前没有等待3秒,也没有显示对话框。他直接送我回来。如果我只想显示对话框onclick,他表现不错,如果我想在登出之前只等待3秒钟,他表现得很好并且他正在等待。但是当我把这两件事(弹出和等待秒)结合起来时,他并没有这样做,而是直接把我送回去了。

public void logout() {
    try {
        Thread thread = new Thread();
        try {
            thread.sleep(3000);
            ExternalContext ec = FacesContext.getCurrentInstance()
                    .getExternalContext();
            ec.invalidateSession();
            ec.redirect(ec.getRequestContextPath() + "/home.xhtml");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void showLogoutMessage() {
    FacesContext context = FacesContext.getCurrentInstance();
    context.addMessage(null, new FacesMessage("Logout",
            "Sie werden abgemeldet!"));

    logout();
}

<p:growl id="growl" showDetail="true" sticky="false" life="2000" autoUpdate="true" />
<p:commandButton value="#{navigationBean.abmelden}" ajax="false"
                action="#{navigationBean.showLogoutMessage()}" update="growl"  styleClass="menubutton"
                style="position:relative;top:20px">
            </p:commandButton>

任何人都可以帮助我或给我另一个解决方案吗?

1 个答案:

答案 0 :(得分:0)

你可以这样使用:

  1. 在commandButton中使用oncomplete来调用javascript函数。
  2. javascript函数调用p:remoteCommand 3秒后,remoteCommand调用logout。
  3. 代码更改:

    public void showLogoutMessage(){
    FacesContext context = FacesContext.getCurrentInstance();
    context.addMessage(null, new FacesMessage("Logout",
            "Sie werden abgemeldet!"));}
    
    public void logout() {
    try {
        Thread thread = new Thread();
        try {
            thread.sleep(3000);
            ExternalContext ec = FacesContext.getCurrentInstance()
                    .getExternalContext();
            ec.invalidateSession();
            ec.redirect(ec.getRequestContextPath() + "/home.xhtml");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    } catch (IOException e) {
        e.printStackTrace();}
    }
    

    XHTML:

    <p:growl id="growlmm" showDetail="true" sticky="false" life="2000" autoUpdate="true" />
            <p:commandButton value="test" ajax="true"
                             actionListener="#{templateMB.mm()}" update="growlmm"  styleClass="menubutton"
                             style="position:relative;top:20px"    oncomplete="myLogout();"> 
            </p:commandButton>
            <p:remoteCommand id="rcom3" name="rclogout" process="@this"  action="#{templateMB.goOut()}"/> 
            <script type="text/javascript">
                function myLogout() {
                    setTimeout('rclogout();', 3000);
                }
            </script>