我需要保持 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 秒打印一次“收到的心跳”文本。但对话仍然到期。