【问题标题】:AJAX pages with CDI beans and @ConversationScoped带有 CDI bean 和 @ConversationScoped 的 AJAX 页面
【发布时间】:2013-03-03 20:40:15
【问题描述】:

我很感兴趣当我使用 CDI 时,将 JSF 页面与 AJAX 一起使用的正确方法是什么。 我测试了使用@SessionScoped 配置CDI bean,但我发现AJAX 有问题。

将 AJAX 与配置有 @ConversationScoped 的 CDI bean 一起使用是否合适?

我发现我必须将 conversation.begin(); 放入 Bean 构造函数中,并将 conversation.end(); 放入 Java 方法中,这必须在会话完成时进行。我可以以某种方式自动执行此操作吗?

P.S 我可以使用此代码在用户关闭页面时自动释放资源吗?

@Remove
public void finishIt(){
     conversation.end();
}

【问题讨论】:

  • 您使用的是什么 CDI 实现? Seam 还是 Apache CODI? CODI 有我非常喜欢的@ViewAccessScoped。只要有一个 jsf 页面引用它,它就会存在。有点像自动对话
  • 我使用包javax.inject.Named。我想这是标准 JSF 框架的一部分。
  • "...但是我发现AJAX有问题。"到底是什么问题?
  • @MattHandy 我在这里描述了这个问题:stackoverflow.com/questions/9761568/…
  • CODI、SEAM3、DeltaSpike(= CODI、SEAM3 等的合并)是 CDI 扩展/附加组件。特别是。 CODI 和 DeltaSpike 可以与 Weld 和 OpenWebBeans 一起使用(= 真正的 CDI 实现)。参见例如builds.apache.org/view/A-F/view/DeltaSpike 链接在 incubator.apache.org/deltaspike/build.html

标签: jsf jsf-2 cdi


【解决方案1】:

我发现我必须将 conversation.begin(); 放入 Bean 构造函数,并将 conversation.end(); 放入 Java 方法中,这必须在会话完成时进行。

没错。有关具体代码示例,另请参阅How to replace @ManagedBean / @ViewScope by CDI in JSF 2.0/2.1

我能以某种方式自动执行此操作吗?

如果您想要一个 bean,只要您在单个视图上回发,它就必须存在,那么至少升级到 JSF 2.2。它provides 与 CDI 兼容 @ViewScoped 开箱即用。

但是,如果您想要一个只要您在视图中引用它就必须存在的 bean,无论您坐在哪个视图中,然后考虑改用 @ViewAccessScopedDeltaSpike。一旦你导航到一个没有在任何地方引用 bean 的视图,它就会被丢弃。

另见:

【讨论】:

  • 我可以在 JSF 关闭时使用@Remove public void finishIt(){ conversation.end(); } 调用conversation.end();。还有我什么时候可以期待 JSF 2.2 准备好进行测试?
  • 没有。顺便说一句,您的声明“JSF 已关闭”也毫无意义。 JSF 2.2 目前作为里程碑版本提供。请参阅javaserverfaces.java.net/download.html 官方版本计划在 2013 年 4 月左右,作为 Java EE 7 的一部分。
  • 关于这个问题的另一个有趣的问题。是否计划在不久的将来用 CODI 取代 CDI?我只是想计划使用哪种技术。
  • CODI 不会取代 CDI。它只是 CDI 的扩展。就像那样,例如PrimeFaces 是 JSF 的扩展。
  • 好的,谢谢您的回答!我会等待新的 JSF 版本。
【解决方案2】:

默认情况下,Conversation 对象处于瞬态。调用 begin 方法将其标记为长时间运行(当真正的对话开始时)。结束对话(通过调用 end 方法)将 Conversation 对象标记为瞬态。

瞬态对话范围的 bean 将在单个请求的生命周期中存在。

除非调用了 conversation.end,否则长期对话(由 conversation.begin 发起)将运行。

【讨论】:

    猜你喜欢
    • 2011-12-24
    • 2013-04-18
    • 1970-01-01
    • 2011-07-12
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多