Я пробую JSF 2.0 (после использования ICEfaces 1.8 в течение последних нескольких месяцев) и пытаюсь понять, почему в JSF 2.0 мой конструктор компонента поддержки вызывается несколько раз.
Предполагается, что компонент создается один раз при создании, но всякий раз, когда я щелкаю по кнопке commandButton, появляется текст «Инициализированный компонент», указывающий на создание нового объекта Bean.
Страница на лицевой стороне:
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:body>
<div id="content">
<h:form id="form">
<h:commandButton value="Toggle" action="#{bean.toggleShowMe}"/>
</h:form>
<h:panelGrid rendered="#{bean.showMe}">
<h:outputText value="Show me!"/>
</h:panelGrid>
</div>
</h:body>
</html>
Фасоль:
@ManagedBean
@RequestScoped
public class Bean {
private boolean showMe = false;
public boolean isShowMe() {
return showMe;
}
public void setShowMe(boolean showMe) {
this.showMe = showMe;
}
public void toggleShowMe(){
System.out.println(showMe);
if(showMe==true){
showMe=false;
}else{
showMe=true;
}
}
/** Creates a new instance of Bean */
public Bean() {
System.out.println("Bean Initialized");
}
}
Вот и все. Просто простой тест. Такое же поведение проявляется, если я использую ICEfaces 2.0, а вместо PanelGrid я использую:
<ice:panelPopup visible="#{bean.showMe}">
Буду признателен за любую помощь здесь. Я затрудняюсь объяснить это.
Обновление : В ответ на Аба Дов, я @SessionScoped bean-компонент, полагая, что он не будет вызывать конструктор при каждом запросе, и столкнулся с тем же поведением. Что мне не хватает?