我正在使用会话范围的托管bean进行页面处理。 在页面上我有一个preRenderComponent:
<f:metadata>
<f:event listener="#{pageBean.init}" type="preRenderComponent"></f:event>
</f:metadata>
此页面是模板客户端,与其他一些页面共享模板。该模板包含一个侧面导航栏,其中包含指向每个模板客户端页面的链接。
页面bean:
@Named
@Default
@SessionScoped
public class pageBean implements Serializable {
@PostConstruct
public void init(){
System.out.println("Page Bean init.");
//call methods that populate data on the page
}
}
问题出现如下:
如果我使用preRenderComponent删除页面上的行,则在访问页面时仍会调用pageBean init()
方法。
如果我保留上述行,则会在访问时调用init()
方法,但每当我单击侧面导航栏并访问使用相同模板的另一个页面时,也会调用它
我提到了这个问题:CDI bean constructor and @PostConstruct called multiple times 并确保我没有将JSF与CDI混合,但这个问题仍然存在。虽然我似乎可以通过简单地删除preRenderComponent行来解决这个问题,但我真的希望了解这里发生了什么,并找出一种方法来避免将来发生。
非常感谢任何信息。