cdi – 如何防止JSF对话过期

我要求保持JSF 2.2 CDI会话过期.我尝试实现一种心跳机制,我使用Ajax单击一个“隐藏”按钮,然后调用一个servlet.但对话仍然到期.为了测试目的,我将超时设置为10秒,我的代码如下所示.

// The begin conversation method in my managed bean
public void beginConversation() {
      if (conversation.isTransient())
      {
          conversation.setTimeout(10000);
          conversation.begin();
      }
}

// JQuery document ready function
$(document).ready(function() {
setInterval(function(){$.get("/HeartbeatServlet");}, 5000);

});

// Heartbeat servlet
@WebServlet("/HeartbeatServlet")
public class HeartbeatServlet extends HttpServlet{

private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
{
    System.out.println("Heartbeat Received");
    request.getSession();
}
}

它每5秒打印一次“Heartbeat Recieved”文本.但谈话仍然到期.

最佳答案 对话超时是会话保持活跃的时间.它不是会话的永久跟踪者.它并不意味着要求保持活力.

没有扩展对话概念,但您可以使用begin(id)重新创建对话.该对话中的任何bean状态都将丢失.

点赞