gpt4 book ai didi

java - @PostConstruct 方法为同一个请求调用了两次

转载 作者:太空狗 更新时间:2023-10-29 22:39:42 26 4
gpt4 key购买 nike

我将 JSF 2.0 与 GlassFish 3.0 结合使用。

我有以下托管 Bean:

@ManagedBean
@RequestScoped
public class OverviewController{

private List<Event> eventList;

@PostConstruct
public void init(){
System.out.println("=> OverviewController - init() - enter");

System.out.println("=< OverviewController - init() - exit");
}
}

overview.xhtml 文件中,我从我的 OverviewController 调用不同的属性或方法。

<ui:repeat var="event" value="#{overviewController.eventList}">
...
</ui:repeat>

一切正常,但问题出在日志文件上:

INFO: Enter : RESTORE_VIEW 1
INFO: Exit : RESTORE_VIEW 1

INFO: Enter : RENDER_RESPONSE 6
INFO: => OverviewController - init() - enter
INFO: => Overview Controller - updateSelectedTab() - enter
INFO: =< Overview Controller - updateSelectedTab() - exit
INFO: =< OverviewController - init() - exit
INFO: => OverviewController - init() - enter
INFO: => Overview Controller - updateSelectedTab() - enter
INFO: =< Overview Controller - updateSelectedTab() - exit
INFO: =< OverviewController - init() - exit
INFO: Exit : RENDER_RESPONSE 6

如您所见,init() 方法在同一个请求中无缘无故地被调用了两次。据我所知,任何用 PostConstruct 注释的方法在每次请求时都会被调用一次。我错了吗?

编辑:页面上没有使用 AJAX。我用 Firebug 检查了请求数。有树请求:

  • 1.一个用于 javax.faces.resource (GET)
  • 2.一个用于css文件(GET)
  • 3.一个用于 overview.xhtml (GET)

最佳答案

如果您有多个框架管理同一个 bean 类,就会发生这种情况。例如。 JSF CDI,或 JSF Spring,或 CDI Spring,等等。仔细检查 bean 上的配置和注释。

如果您使用 CDI 并且在整个类中使用多个 @Named 注释,也会发生这种情况。例如,一个 @Named 直接在类上将其注册为托管 bean,另一个在 @Produces getter 方法上。您需要问问自己,这是否真的是必要的。您也可以只使用 #{bean.someObject} 而不是 #{someObject}

@Named
@RequestScoped
public class Bean {

@PostConstruct
public void init() {
// ...
}

@Named
@Produces
public SomeObject getSomeObject() {
// ...
}

}

如果您的托管 bean 扩展了一些抽象类,而该抽象类又在方法上有一个 @PostConstruct,也会发生这种情况。您应该从中删除注释。或者,您应该使 init 方法抽象并且在实现 bean 上具有 @PostConstruct:

public abstract class BaseBean {

@PostConstruct
public void postConstruct() {
init();
}

public abstract void init();

}

关于java - @PostConstruct 方法为同一个请求调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9077966/

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