2

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

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

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

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

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

2 回答 2

4

而且我发现我必须在会话完成时conversation.begin();放入 Bean 构造函数和conversation.end();Java 方法。

这是正确的。有关具体代码示例,另请参阅如何在 JSF 2.0/2.1 中用 CDI 替换 @ManagedBean / @ViewScope 。

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

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

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

也可以看看:

于 2013-03-15T12:13:16.943 回答
1

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

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

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

于 2013-03-15T12:14:46.283 回答