gpt4 book ai didi

java - RequestScoped bean 在单个请求期间多次创建/销毁

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:51 28 4
gpt4 key购买 nike

我观察到下面描述的我的 requestScoped bean 在单个请求期间被创建了多次。每次重新实例化 bean 时,正如日志所说,就在不久之前,bean 被销毁了。

@ManagedBean(name="namesDirectory")
@RequestScoped
public class NamesDirectory {

public static NamesDirectory getCurrentInstance(){
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().evaluateExpressionGet(context, "#{namesDirectory}", NamesDirectory.class);
}

@PostConstruct
public void foo(){
Easy.log("bean created");
}

@PreDestroy
public void foo1(){
Easy.log("bean destroyed");
}

}

在单个请求的所有处理完成之前 bean 被销毁的原因可能是什么?我该如何避免让这种事情发生?


编辑:

我有 <p:graphicImage url="#" />在我的 facelets 代码中的某些地方导致多次触发请求。删除这些后,我仍然看到创建了此请求,但只创建了两次,而以前是多次。

实际上,我在尝试登录我的应用程序时看到了这一点。因此,在提供凭据并对其进行验证后,将实例化并使用 bean,但在此之后,用户将移动到成功的登录页面,并且在构建过程中再次需要 bean,因此按原样创建不存在的。这导致此请求范围的 bean 创建 2 次,我相信这只是一个请求。

最佳答案

您的登录可能会将浏览器重定向到带有 Location: header 的新页面,这是很正常的。所以你应该期待两个请求,因此会有两个请求范围的 beans。同样,正如您所注意到的,链接图像会引起另一个浏览器请求。这就是网络的运作方式。如果它让你很困扰,你可以使用不同的范围(例如 session ,所以每个登录用户一个 bean)但要小心选项卡式浏览。

关于java - RequestScoped bean 在单个请求期间多次创建/销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9981609/

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