【发布时间】:2012-02-23 01:53:54
【问题描述】:
我将 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。 我用萤火虫检查了请求的数量。有树请求:
- 1.一个用于javax.faces.resource (GET)
- 2.一个用于css文件(GET)
- 3.一个用于overview.xhtml (GET)
【问题讨论】:
-
您是指 ClassFish 还是 GlassFish?
-
您是否正在执行任何 Ajax 调用?使用 FireBug 或类似插件来了解浏览器实际发出了多少请求。
-
@PederN 我更新了问题。
-
在这个页面上有一些调试 JSF 生命周期的技巧。看看吧,说不定有什么可以帮到你balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html
-
谢谢!可悲的是,我找不到任何可以解释我的问题的东西。似乎所有用@PostConstruct注解的方法在Invoke Application或RenderResponse中都被调用了两次
标签: java jsf jsf-2 postconstruct