我要求保持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状态都将丢失.