JavaScript中的Wicket 6无效会话

JavaScript中的Wicket 6无效会话,javascript,session,wicket,Javascript,Session,Wicket,我正在开发一个Wicket应用程序,当用户关闭浏览器或单击指向其他站点的链接时,该应用程序需要注销用户。我找到了RoSch的答案,这是一个很好的基础。不过,我现在的问题是使用这种调用javascript的能力使会话无效。 这是我在js调用中尝试使会话无效: public class PageExitBehaviour extends Behavior{ @Override public void renderHead(Component component, IHeaderResponse r

我正在开发一个Wicket应用程序,当用户关闭浏览器或单击指向其他站点的链接时,该应用程序需要注销用户。我找到了RoSch的答案,这是一个很好的基础。不过,我现在的问题是使用这种调用javascript的能力使会话无效。 这是我在js调用中尝试使会话无效:

public class PageExitBehaviour extends Behavior{

@Override
public void renderHead(Component component, IHeaderResponse response) {
    super.renderHead(component, response);
    response.render(new OnDomReadyHeaderItem("window.onbeforeunload = function (e) {"
            + "getSession().invalidate();" + "};"));

}

有人知道在“window.onbeforeunload=”之后放入什么以使其调用getSession().invalidate()吗?或者有人知道关闭浏览器窗口时注销用户的其他方法吗?

由于会话是在服务器端管理的,因此当用户离开页面时,您必须向服务器发送AJAX请求。下面的行为实现就是这样做的

public class PageExitLogoutBehavior extends AbstractDefaultAjaxBehavior {

  @Override
  public void renderHead(Component component, IHeaderResponse response) {
    super.renderHead(component, response);
    response.render(new OnDomReadyHeaderItem(String.format(
            "window.onbeforeunload = function(e){ %s };",
            this.getCallbackScript())));
  }

  @Override
  protected void respond(AjaxRequestTarget target) {
    System.out.println("logging out...");
    target.getPage().getSession().invalidate();
  }

}

让我知道这是否适用于您。

这非常适用,非常感谢您,感谢您对需要AJAX的说明。你好,Tom,我想知道您的方法是否也适用于浏览器端打开多选项卡的Wicket web应用程序。当用户关闭整个浏览器屏幕而不只是打开其中一个选项卡时,如何实现相同的机制?非常感谢:)