在注销 Primefaces 之前咆哮
Growl before Logout on Primefaces
我已经构建了一个客户端,您可以在其中登录、查看一些内容并注销。一切正常。如果您单击注销按钮,他将直接注销并将我送回我的登录页面。单击注销按钮后会立即发生这种情况。所以我想在客户端将我发送回登录页面之前增加大约 3 秒的等待时间。另外,我想添加一个咆哮的弹出消息,类似于:"You are logging out..."。
问题是,客户端在将我发回之前没有等待 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>
任何人都可以帮助我或给我另一个解决方案的提示吗?
你可以这样使用:
- 在 commandButton 中使用 oncomplete 调用 javascript 函数。
- javascript 函数调用 p:remoteCommand 3 秒后,remoteCommand 调用注销。
此处代码更改:
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>
我已经构建了一个客户端,您可以在其中登录、查看一些内容并注销。一切正常。如果您单击注销按钮,他将直接注销并将我送回我的登录页面。单击注销按钮后会立即发生这种情况。所以我想在客户端将我发送回登录页面之前增加大约 3 秒的等待时间。另外,我想添加一个咆哮的弹出消息,类似于:"You are logging out..."。 问题是,客户端在将我发回之前没有等待 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>
任何人都可以帮助我或给我另一个解决方案的提示吗?
你可以这样使用:
- 在 commandButton 中使用 oncomplete 调用 javascript 函数。
- javascript 函数调用 p:remoteCommand 3 秒后,remoteCommand 调用注销。
此处代码更改:
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>