带有CDI bean和@ConversationScoped的AJAX页面

问题描述 投票:1回答:2

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

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

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

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

@Remove
public void finishIt(){
     conversation.end();
}
jsf jsf-2 cdi
2个回答
2
投票

而且我发现必须将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,无论您坐在哪个视图,都可以考虑使用@ViewScoped中的@ViewAccessScoped。一旦导航到在任何地方都没有引用bean的视图,它将被丢弃。

另请参见:

  • @ViewAccessScoped

1
投票

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

瞬态对话作用域bean将在单个请求的生命周期内生存。

除非调用对话.end,否则将运行长期对话(由对话.begin启动)。

© www.soinside.com 2019 - 2024. All rights reserved.