Использование Primefaces 5.0 JSF 2.2.7, развернутого на EAP 6.1.@ViewScoped @PostContruct вызывается при каждом запросе ajax
У меня этот Управляемый Бин ниже.
import hh.bean.Service;
import hh.dao.ServiceDao;
import hh.dao.impl.ServiceDaoImpl;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean
@ViewScoped
public class View1 implements Serializable {
private static final long serialVersionUID = 1L;
private ServiceDao serviceDao = new ServiceDaoImpl();
@PostConstruct
public void init() {
System.out.println(View1.class.getName() + ": init() " + this);
}
public List<Service> getServices(){
return serviceDao.getAllServices();
}
}
Я называю это из xhtml ниже.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Home Web</title>
<f:facet name="first">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8" />
<meta name="viewport"
content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<meta name="apple-mobile-web-app-capable" content="yes" />
</f:facet>
</h:head>
<h:body>
<h:outputStylesheet library="css" name="newcss.css" />
<p:dataTable var="service" value="#{view1.services}">
<p:column style="width:16px">
<p:rowToggler />
</p:column>
<p:column headerText="Id">
<h:outputText value="#{service.id}" />
</p:column>
<p:column headerText="xxxx">
<h:outputText value="#{service.description}" />
</p:column>
<p:rowExpansion>
<p:dataTable var="sv" value="#{view1.services}">
<p:column headerText="Id">
<h:outputText value="#{sv.id}" />
</p:column>
</p:dataTable>
</p:rowExpansion>
</p:dataTable>
</h:body>
</html>
я заметил, каждый раз, когда я расширяю строку мой init()
будет вызываться. Я думал, что @ViewScoped
живет, когда запрос остается на той же странице.
Когда я переключаюсь на @SessionScoped
, init()
не вызывается, когда я расширяю строку.
Edit 1: Поместите все в XHTML, указать JSF версия/осущ
Edit 2: исправил проблемы, окружая p:dataTable
с h:form
. Не знаете, почему это исправлено ...
Код выглядит нормально. Какой JSF имп/версия? И разве это XHTML действительно все, что у вас есть в h: body? – BalusC
@BalusC Я обновил свой пост, чтобы включить весь XHTML, и я использую JSF 2.2.7 – HDoan
Извините, что трачу все время. Я исправил его, окружая 'p: dataTable'' h: form'. Но я не знаю, почему это задумалось. – HDoan