为什么ui:包括不同bean范围的行为会有所不同?

时间:2011-06-24 17:13:11

标签: jsf-2 cdi

我一直在修补ui:最近包含并且发现它在许多行为中都相当古怪。经过一些测试后,在我看来,这些问题与这些问题有关,可以追溯到ui:include适合jsf生命周期。我正在努力更好地掌握这个框架,并想知道是否有人可以帮助我了解正在发生的事情。

采用以下示例:

的index.xhtml

<h:panelGrid id="testInclude">
    <ui:include src="#{bean.pageTarget}.xhtml" />
</h:panelGrid>

bean(ManagedBean,SessionScoped)

public String getPageTarget() { return "pageA"; }
@PostConstruct
public void init() { System.out.println("new bean created"); }

pageA.xhtml

<ui:composition>
    <h:outputText value="You are on page: #{bean.pageTarget}" />
</ui:composition>

首次呈现页面时,会创建两个bean实例。这与pageA中对bean的引用直接相关。基于BalusC之前的答案之一,这可能与ui:include处理时有关:dynamic ui:include with el-expression?

好奇的是,更改bean以使用CDI的会话范围实际上摆脱了这个问题。有谁知道为什么这有效?

0 个答案:

没有答案