Я пытаюсь использовать JSF 2.0 (после использования ICEfaces 1.8 в течение последних нескольких месяцев), и я пытаюсь понять, почему в JSF 2.0 мой конструктор being bean-компонента вызывается несколько раз.JSF Backing Bean конструктор называется несколько раз
Боб предположительно создается один раз при создании, но текст «Инициализированный Bean» появляется всякий раз, когда я нажимаю кнопку CommandButton, указывая на то, что новый объект Bean был инстансирован.
Страница facelet:
<?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}">
Я был бы признателен за любую помощь здесь. Я не могу объяснить это.
Обновление: В ответ на Aba Dov, I @SessionScoped bean, полагая, что он не будет вызывать конструктор при каждом запросе и сталкиваться с тем же поведением. Что мне не хватает?
Если сеанс компонента IS сеанса ограничен, он не будет создан более одного раза за сеанс - поскольку этот beahviour широко используется, ошибка, вероятно, связана с вашим кодом, а не с JSF; вы используете @SessionScoped из нужного пакета? (в EE6 два). – fdreger
fdreger-Я использую javax.faces.bean.SessionScoped. Должен ли я использовать javax.enterprise.context.SessionScoped? – TheDream34