0

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

  1. 如果在向导的中间,用户在地址栏中输入了一个 url 并导航到另一个页面而没有单击提交按钮,我还有办法结束对话吗?
  2. 我应该为这种情况而烦恼,还是积累这种无休止的对话会成为我的应用程序的开销?
4

1 回答 1

1

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

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

 @Inject Conversation conversation;

// conversation.end();

这是实现此功能的有用部分:如何干净地结束 CDI @ConversationScoped

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

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

如果我不能使用 FlowScoped,我个人会对 Deltaspikes JSF 模块中的类型安全导航进行扩展以实现相同的目的。

祝你好运

于 2013-11-15T13:37:22.753 回答