在我的 JSF 项目中,我有一个多页向导。我正在@ConversationScoped
为该向导使用 CDI bean。对话效果很好。当用户来到向导的第一页时,新的对话就开始了。当用户单击任何页面中的提交按钮时,对话结束。但我有几个问题。
- 如果在向导的中间,用户在地址栏中输入了一个 url 并导航到另一个页面而没有单击提交按钮,我还有办法结束对话吗?
- 我应该为这种情况而烦恼,还是积累这种无休止的对话会成为我的应用程序的开销?
在我的 JSF 项目中,我有一个多页向导。我正在@ConversationScoped
为该向导使用 CDI bean。对话效果很好。当用户来到向导的第一页时,新的对话就开始了。当用户单击任何页面中的提交按钮时,对话结束。但我有几个问题。
大多数应用程序最终都会使用某种系统来跟踪用户当前所在的位置。这应该由 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 模块中的类型安全导航进行扩展以实现相同的目的。
祝你好运