如何检查 JSF 页面中是否存在活动会话?

发布于 2024-10-12 03:43:20 字数 239 浏览 2 评论 0原文

有没有办法直接在jsf页面中检查是否有活动会话? 我已经尝试过,但不起作用:

<p:ajaxStatus onerror="#{session == null ? 'idleDialog.show();' : null}"

提前谢谢您

@Update 我发现即使发生 viewExpiredException,onerror 也不会被触发。

there is a way to check if there is an active session directly in jsf page?
I have try this but it doesn't work:

<p:ajaxStatus onerror="#{session == null ? 'idleDialog.show();' : null}"

thank you in advance

@Update
I have see that onerror isn't fired even if viewExpiredException occurr.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挽手叙旧 2024-10-19 03:43:20

评估 EL 时始终存在活动会话。如果页面打开之前不存在,则会自动创建。

在 JSF 中,由于所谓的“状态保存方法”,过期会话是一个问题。默认情况下,生成的页面的状态存储在会话中。如果您尝试提交表单并且会话已过期,则状态会丢失并因此发生错误。

但即使在这种情况下,也会生成一个新会话。因此,正如 BalusC 所指出的,您可以保持会话处于活动状态 - 使用 ajax 请求进行轮询(例如 richfaces 具有此类功能),以便会话永远不会过期

There is always an active session at the time the EL is evaluated. If there isn't before the page was opened, it is automatically created.

In JSF expiring sessions are a problem because of the so called "state saving method". By default the state of the generated page is stored in the session. If you try to submit the form and the session is expired, the state is lost and hence an error occurs.

But even in that case a new session is generated. So, as BalusC noted, you can keep the session alive - poll with ajax requests (for example richfaces has such facilities) so that the session never expires

不再让梦枯萎 2024-10-19 03:43:20

您可以在 JSF 2.0 中使用以下 EL 表达式:

#{facesContext.externalContext.getSession(false) == null}

请注意,引用隐式 EL 对象 session 将自动再次(重新)创建它。因此,这个永远不能用于测试。

例如,

假设您在支持 bean 中使会话无效,并且呈现了具有以下内容的 Facelet:

#{facesContext.externalContext.getSession(false) == null}
#{session.new}
#{facesContext.externalContext.getSession(false) == null}

这将呈现:

true true false

会话首先真正消失,但通过引用隐式 EL 对象,它再次创建(并且将在新状态)。然后第二个测试发现会话再次存在。

You can use the following EL expression in JSF 2.0:

#{facesContext.externalContext.getSession(false) == null}

Do note that referencing the implicit EL object session will automatically (re)create it again. This one can thus never be used for testing.

E.g.

Suppose you would have invalidated the session in a backing bean, and a Facelet with the following content was rendered:

#{facesContext.externalContext.getSession(false) == null}
#{session.new}
#{facesContext.externalContext.getSession(false) == null}

This would render:

true true false

The session is first really gone, but by referencing the implicit EL object it's created again (and will be in the new state). The second test then finds the session to be there again.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文