Здравствуйте,
Я помещаю ui:include
внутри h:panelGroup
и рендеринг его динамически, когда это необходимо.
Обычное предположение и теория: ManagedBean, связанный с включенной страницей, не должен инициализироваться, когда ui:include
не отображается.
Этого не происходит, когда я использую ui:repeat
внутри включенной страницы.
Вот пример повторения проблемы:
page.1.xhtml
<h:body>
<h:form>
<p:outputLabel value="#{mBeanOne.beanOnetxt}"/><br/>
</h:form>
<h:panelGroup rendered="false" layout="block">
<ui:include src="page2.xhtml"/>
</h:panelGroup>
</h:body>
MBeanOne.java
@ManagedBean
@ViewScoped
public class MBeanOne implements Serializable{
private String beanOnetxt;
public MBeanOne() {
System.out.println("MBeanOne - Constructor");
}
@PostConstruct
public void init(){
beanOnetxt = "This is Managed Bean 1";
System.out.println("MBeanOne - Postconstruct");
}
//SETTERS and GETTERS
}
page2.xhtml
<h:body>
<h:outputText value="#{mBeanTwo.beanTwotxt}"/><br/>
<ui:repeat var="var" value="#{mBeanTwo.versionList}">
<h:outputText value="#{var}"/><br/>
</ui:repeat>
</h:body>
MBeanTwo.java
@ManagedBean
@ViewScoped
public class MBeanTwo implements Serializable{
private String beanTwotxt;
private List<String> versionList;
public MBeanTwo() {
System.out.println("MBeanTwo - Constructor");
}
@PostConstruct
public void init(){
beanTwotxt = "This is Managed Bean 2";
versionList = new ArrayList<String>();
versionList.add("Playground");
versionList.add("Kestrel");
versionList.add("Merlin");
versionList.add("Tiger");
System.out.println("MBeanTwo - Postconstruct");
}
//SETTER and GETTER
}
Как вы можете видеть в page1.xhtml
, я использую rendered="false"
для h:paneGroup
, который инкапсулирует ui:include
, но все же MBeanTwo
получает инициализацию при загрузке page1.xhtml
.
Если я удалю ui:repeat
из page2.xhtml
, то MBeanTwo
не будет инициализироваться.
Является ли это ошибкой в JSF, если это возможно?
Используемые и проверенные версии:
Направляющие 3.5
JSF 2.1.13 и 2.2.0-m05