CDI会话没有结束

时间:2013-11-15 12:42:02

标签: jsf cdi conversation-scope

在我的JSF项目中,我有一个多页面向导。我正在为该向导使用@ConversationScoped CDI bean。谈话效果很好。当用户进入向导的第一页时,将开始新的对话。当用户单击任何页面中的提交按钮时,会话结束。但我有几个问题。

  1. 如果在向导中间,用户在地址栏中输入了网址并导航到另一个网页而未点击提交按钮,我还有办法结束会话吗?
  2. 我是否应该为这种情况而烦恼,或者累积这种非结束对话会成为我申请的开销?

1 个答案:

答案 0 :(得分:1)

大多数应用程序都会使用某种跟踪用户当前所在位置的系统。这应该是由JSF 2.2中的@FlowScoped帮助的。如果您可以使用它,那么应该为您管理所有内容。找到例子应该很容易。

如果您无法使用FlowScoped并希望继续使用@ConversationScoped,则必须实施自己的系统以跟踪用户所在的位置。当用户不在您的流程中时,您将结束对话。

 @Inject Conversation conversation;

// conversation.end();

以下是实现此功能的有用部分:How to cleanly end a CDI @ConversationScoped

但是我会选择http://deltaspike.apache.org/core.html并使用:进行对话。

MyBean myBean = BeanProvider.getContextualReference(MyBean.class, false);

我个人会对Deltaspikes JSF模块中的类型安全导航进行扩展,以便在我无法使用FlowScoped时实现相同的目的。

祝你好运