Моя проблема в том, что один: при каждом HTTP-запросе создается новый бонусный сеанс, и я не знаю почему.JSF создает новый SessionScoped Bean для каждого запроса
Вот мой JSF индекс страницы:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
<link type="text/css" rel="stylesheet" href="css/default.css"/>
</h:head>
<h:body>
<p:growl autoUpdate="true" showDetail="true" globalOnly="true"/>
<h:form id="f_main">
<ui:include src="#{pageBean.page}.xhtml"/>
</h:form>
</h:body>
</html>
Вот мой PageBean
package web.bean.system;
import org.apache.log4j.Logger;
import web.bean.AbstractBean;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class PageBean extends AbstractBean {
private static final long serialVersionUID = -882977117976414497L;
private static final Logger LOG = Logger.getLogger(PageBean.class);
public static final String HOME = "home";
private static int IT = 0;
private String page;
public PageBean() {
LOG.debug(IT++);
this.page = HOME;
}
public String getPage() {
LOG.debug(page);
return this.page;
}
public void setPage(String page) {
LOG.debug(page);
this.page = page;
}
}
В этом случае, домашняя страница пуста.
Но когда я просматриваю журналы после многократного обновления, я вижу, что для каждого HTTP-запроса создается новый bean-компонент.
Я проверил, что я действительно использовать javax.faces.bean, а не другой пакет, но я не знаю, почему это не работает ...
Имеет ли вы решение для меня?
Попробуйте переместить код из конструктора в метод 'init', аннотированный' @ PostConstruct'. Разве это имеет значение? – Manuel
Первоначально я так делал, но это не сработало – Jeremie