Давайте создадим чрезвычайно простой составной компонент:
<cc:implementation>
#{testBean.someField}
</cc:implementation>
Боб для него:
public class TestBean {
private boolean someField = false;
public boolean getSomeField() { return someField; }
@PostConstruct
public void init() {
System.out.println("PostConstruct");
}
}
Затем вызовите его как обычно, но не показывайте его:
<codeEditor:test rendered="#{false}" />
Что происходит, так это то, что компонент никогда не отображается и компонент никогда не инициируется, как можно было бы предположить.
Однако, если мы изменим компонент следующим образом:
<cc:implementation>
<h:outputText value="#{testBean.someField}" />
</cc:implementation>
Что происходитзаключается в том, что компонент по-прежнему не визуализируется (поскольку атрибут rendered
равен false
), однако, bean-компонент действительно создается.Это происходит всегда, когда мы используем свойство bean-компонента внутри некоторого собственного компонента JSF (h:panelGroup
, h:inputHidden
, что угодно).
Почему это так?