gpt4 book ai didi

jsf - OmniFaces ViewScoped bean 的内存影响?

转载 作者:行者123 更新时间:2023-12-01 13:36:54 27 4
gpt4 key购买 nike

据我了解,ViewScoped bean 只有在发生以下情况之一时才会被销毁:

1) JSF 向另一个页面发送一个 POST 请求,类似 <h:commandLink...>

2)开启bean个数超过最大阈值设置(默认15个)

3) 用户 session 过期

这是我的困惑:

#1 是否意味着如果用户通过 GET 请求离开页面,bean 将保持打开状态,即使最终在另一个页面的同一浏览器选项卡中发生 JSF POST 也是如此?或者,无论用户在哪个页面,一旦发送了 JSF POST,该浏览器选项卡的所有事件 @ViewScoped 实例都会被销毁吗?

#2 是否意味着用户可以为每个 @ViewScoped 类激活 15 个 bean 实例?或者它是 15 个 bean 实例而不考虑类——这意味着我可以有 5 个 Class1 实例、5 个 Class2 实例和 5 个 Class3 实例,而一个新的 bean 会破坏最旧的事件 bean?

对于 #3,如果 STATE_SAVING_METHOD 设置为“client”,这是否会对销毁 ViewScoped bean 产生任何影响?据我所知,如果 STATE_SAVING_METHOD 设置为客户端,则需要一种方法来手动控制 session 过期。

最后,有没有办法管理事件的 ViewScoped bean,以便在用户单击“注销”时销毁它们?

最佳答案

我通过向每个 @ViewScoped bean 添加一个 @PreDestroy 方法并在它被销毁时进行记录来找出这些问题的答案。对于其他可能对此感到好奇的人:

对于 #1,如果您使用 GET 请求离开页面,但稍后发送 post 请求,则 bean 不会被销毁。该 bean 将保留在内存中,直到达到“最大事件 View 范围”设置并且轮到 bean 被销毁,或者 session 已失效。

对于#2,等级无关紧要。您可以有 5 个 Class1 实例、5 个 Class2 实例和 5 个 Class3 实例,并且新的 ViewScoped bean 实例将销毁最旧的 bean,假设您的阈值是 15。

对于#3,即使 STATE_SAVING_METHOD 设置为客户端,一旦 session 失效,bean 似乎就被销毁了。

关于jsf - OmniFaces ViewScoped bean 的内存影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21236730/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com