有一种方法可以直接在jsf页面中检查是否存在活动会话? 我试过这个,但它不起作用:
<p:ajaxStatus onerror="#{session == null ? 'idleDialog.show();' : null}"
提前谢谢
@Update 我已经看到即使出现viewExpiredException也不会触发onerror。
答案 0 :(得分:3)
评估EL时始终存在活动会话。如果在页面打开之前没有,则会自动创建。
在JSF中,到期会话是一个问题,因为所谓的“状态保存方法”。默认情况下,生成的页面的状态存储在会话中。如果您尝试提交表单并且会话已过期,则状态将丢失,因此会发生错误。
但即使在这种情况下,也会生成一个新会话。因此,正如BalusC所指出的那样,你可以让会话保持活跃状态 - 使用ajax请求进行轮询(例如,richfaces具有这样的功能),以便会话永不过期
答案 1 :(得分:0)
您可以在JSF 2.0中使用以下EL表达式:
#{facesContext.externalContext.getSession(false) == null}
请注意,引用隐式EL对象session
将自动(重新)再次创建它。因此,这个不能用于测试。
E.g。
假设您在支持bean中使会话无效,并且呈现了具有以下内容的Facelet:
#{facesContext.externalContext.getSession(false) == null}
#{session.new}
#{facesContext.externalContext.getSession(false) == null}
这将呈现:
true true false
会话首先真的消失了,但是通过引用隐式EL对象,它再次被创建(并且将处于新状态)。然后第二个测试再次找到会话。