我很感兴趣,当我使用CDI时,将JSF页面与AJAX一起使用的正确方法是什么?我测试过使用@SessionScoped
配置CDI Bean,但是我发现AJAX存在问题。
将AJAX与配置为@ConversationScoped
的CDI bean一起使用是否合适?
[我发现我必须将conversation.begin();
放入Bean构造函数中,并将conversation.end();
放入Java方法中,这必须在会话完成时进行。我可以以某种方式自动执行此操作吗?
PS可以在用户关闭页面时使用此代码自动释放资源吗?
@Remove
public void finishIt(){
conversation.end();
}
而且我发现必须将
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
默认情况下,会话对象处于过渡状态。调用begin方法会将其标记为长时间运行(当真正的对话开始时)。结束对话(通过调用end方法)将对话对象标记为瞬态。
瞬态对话作用域bean将在单个请求的生命周期内生存。
除非调用对话.end,否则将运行长期对话(由对话.begin启动)。