我们有几个用户可以登录的Web应用程序。在单击注销按钮时,必须处理一些逻辑。问题是大多数用户在没有单击注销按钮的情况下关闭浏览器。我尝试以下方法在浏览器关闭时调用我的逻辑:
在目前的firefox版本中,一切正常但我在使用IE9时遇到了一些问题。关闭IE9中的选项卡会调用我的逻辑。关闭浏览器不起作用。调用我的JS函数,但不执行对服务器的请求。有什么方法可以解决这个问题吗?顺便说一句:我知道这不是100%的解决方案,但我们需要这个功能。我的函数和p:remoteCommand看起来就像那样。
function automaticLogout() {
handleAutomaticLogout();
alert('BlaBla');
}
<p:remoteCommand name="handleAutomaticLogout" actionListener="#{myBean.handleAutomaticLogout}" async="false" />
答案 0 :(得分:0)
您是否特别需要客户端Javascript解决方案,或者这就是您到目前为止的方式?
在服务器端,在Backing Bean方法上方放置@PreDestroy
注释会导致在Bean超出范围之前调用该方法。
如果您使用此注释编写invalidates the session(session.invalidate()
)方法,则当用户离开您的页面而不单击“注销”时将调用该方法。
支持Bean:
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
@ManagedBean
@SessionScoped
public class PreDestroyBean {
//Called by button - log out perhaps?
public void killTheSessionDeliberately() {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
session.invalidate();
}
@PreDestroy
public void revokeLicense() {
System.out.println("PreDestroy method was called.");
}
}
页面按钮:
<h:form>
<p:commandButton id="killSession" value="Kill Session"
actionListener="#{preDestroyBean.killTheSessionDeliberately()}" update="@form" />
</h:form>
答案 1 :(得分:0)
您可以将p:remoteCommand与onunload一起使用。 例如:
@AfterMethod
引用http://forum.primefaces.org/viewtopic.php?f=3&t=15695 它对我有用。