【问题标题】:How to use @ConversationScoped to handle more than one backing bean?如何使用@ConversationScoped 处理多个支持 bean?
【发布时间】:2018-10-07 04:46:24
【问题描述】:

Java 1.7 / JSF 2 / JPA 2 / Hibernate 4

我已经阅读了许多关于@ConversationScoped 的教程和帖子,其中的信息都是相同的:当您对 一个 支持 bean 有很多视图时使用它。

但是,我有一个业务流程场景,我必须:

  1. 在列表页面中显示多个项目(由列表支持 bean 支持);
  2. 显示编辑页面(由另一个支持 bean 支持)以编辑列表的特定项目;
  3. 编辑完成后,返回列表页面,该页面应显示相同的先前上下文。

编辑页面很复杂,并且有许多在列表支持 bean 中没有意义的依赖项,这就是为什么我更喜欢让两个支持 bean 在两个不同的页面上工作,但在一个单一的业务上下文中。

这可以实现吗?步骤是什么?

【问题讨论】:

  • 当您对一个支持 bean 有很多视图时使用它。它在哪里说明了这一点?你的 1,2,3 是可能的,我一直在做这些事情。在基本方面............我看不到真正的问题/问题......对不起......但也许'viewscoped'bean更适合这里......不确定
  • @Kukeltje:同时 - 在对话期间 - 客户端可以对 bean 执行 AJAX 请求或导航到仍然引用同一个托管 bean 的其他页面。在这些情况下,bean 将在客户端交互中保持其状态。。您将在byteslounge.com/tutorials/… 中找到它
  • @Kukeltje:所以,你说的是你用@ViewScoped注释你的支持bean,然后简单地从一个页面导航到另一个页面,当你回到第一页时,它的上下文被保留了?
  • 据我所知,这里的问题是您想保留列表的上下文。但是,我不知道您所说的“上下文”是什么意思。是列表的顺序和过滤吗?
  • 你的意思是没有范围绑定到那些支持 bean,所以我将盲目拍摄。如何制作那些支持 bean @Dependent 并将它们注入到这个 @ConversationScoped bean 中? @ConversationScoped bean 然后将用于使用来自那些依赖 bean 的信息来恢复(设置)这些页面上的状态? (为了清楚起见 - 依赖 bean 的生命周期绑定到它注入的任何内容,因此只要对话存在,它就会存在。)

标签: java jsf-2 cdi


【解决方案1】:

经过一些测试,我可以让它工作。我所要做的就是在我的编辑按钮上添加 cdi 按钮参数。为了让它工作,我的编辑按钮必须是这样的:

<p:commandButton title="Edit"
                 action="#{myMB.nextView}"
                 ajax="false">
    <f:param name="id" value="#{bean.id}"/>
    <f:param name="cid" value="#{myMB.conversation.id}"/>
</p:commandButton>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多