gpt4 book ai didi

jsf-2 - JSF 对话

转载 作者:行者123 更新时间:2023-12-02 02:21:44 29 4
gpt4 key购买 nike

在 JBoss AS7 中工作,使用 Conversation Scope 管理浏览器选项卡中的用户交互。

我注意到我的页面附加了 ?cid 参数。这很棒 - 直到用户为页面添加书签然后尝试返回它!对话过滤器给出“没有这样的对话”消息。

有没有更好的管理对话的方法?也许是一个实现或一个开关,使其使用隐藏字段(在 AJAX 中适当小心)?或者,我将不得不开始尝试拦截对话异常或修改过滤器!

谢谢
- 理查德

进一步:

我拦截 BeforeRestoreView 事件用于其他目的(主要是登录处理)。你会认为这会奏效:

/**
* @return true if there is no valid Conversation context.
*/
private boolean conversationNotActive()
{
Context conversationContext = m_beanManager.getContext(ConversationScoped.class);
return !conversationContext.isActive();
}

但是我无法获得上下文来询问它是否处于事件状态!现在只会抛出一个 Try-Catch。

最佳答案

我们现在采取两管齐下的方法。

一个相当复杂的对话管理器检测到一个错误的对话 ID 并采取适当的行动。它当前响应 After Restore View 事件。我想更早地移动它,但在此阶段派生 View ID 时遇到问题。我已经编写了一个 JSF 到 CDI 桥来将事件传递给 CDI。 SeamFaces 会做同样的事情,但事实证明对我们来说太重了。

对于普通的 GET, session 管理器重定向到 self 而不带 cid 参数,以启动新的 session 。对于回发,它返回 HTTP 410 错误。死对话的检测如上。我们可以在创建对话时使用更随机的对话 ID,以防止在重复使用 ID 时发生冲突。

对话管理器还将根据它保存的有关页面的元数据开始对话。 (/forms/下的所有页面都需要在我们的应用程序中进行对话)。它在执行此操作时使用重定向以确保 CID 参数无处不在。如果我可以解决在 RestoreView 阶段之前获取表单 ID 的问题,这可能就变得不必要了。

我们使用浏览器历史 API 从用户的浏览器 URL 窗口中删除 cid。

关于jsf-2 - JSF 对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7817936/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com