【问题标题】:CDI Conversation without endingCDI 对话永无止境
【发布时间】:2013-11-15 12:42:02
【问题描述】:

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

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

【问题讨论】:

    标签: jsf cdi conversation-scope


    【解决方案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);

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

    祝你好运

    【讨论】:

    • IMO FlowScoped 针对大多数用例进行了过度设计,而 CODI 范围更好。我希望 DeltaSpike 也能拥有它们。
    • @DarWhi 我可能同意我必须先多用一点。 Deltaspike 将拥有它们,它以大修版本的形式出现,由于关键提交者的时间限制,到目前为止该版本一直在停止导入。
    • 您提供的 SO 链接似乎很有趣。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2021-08-26
    • 2016-06-04
    • 1970-01-01
    相关资源
    最近更新 更多