Pessoal, estou com um problema muito chato. Ficarei muito grato se puderem me ajudar.
Seguinte: tenho um componente <p:poll> que executa um método a cada 5 segundos e atualiza dois componentes de id “slideshow1” e “slideshow2”.
Ele consegue fazer as chamadas e retornar com sucesso. Porém depois de algumas chamadas esses componentes simplesmente somem da visualização (no lado cliente), mas continuam na ViewRoot.
<h:form id="formulario" binding="#{form}">
<p:poll id="poll" update="slideshow1,slideshow2" interval="5"
listener="#{muralBean.getTextosA(form)}" autoStart="true"/>
<h:panelGroup layout="block" binding="#{muralBean.slideshow1}"
id="slideshow1" styleClass="slide1" rendered="true">
</h:panelGroup>
<h:panelGroup layout="block" binding="#{muralBean.slideshow2}"
id="slideshow2" styleClass="slide2" rendered="true">
</h:panelGroup>
Estou colocando o método chamado, pois nele eu limpo os “filhos” de cada um, e adiciono dependendo das condições. mas é só isso, não sei porque isso está acontecendo.
public void getTextosA(UIComponent componente)
{
//HtmlPanelGroup slide1 = null;
//HtmlPanelGroup slide2 = null;
List<Texto> tempTextos = new ArrayList<>();
List<?> textosDiff = new ArrayList<>();
try{
//slide1 = (HtmlPanelGroup) componente.findComponent("formulario:slideshow1");
/* slide1 = (HtmlPanelGroup) FacesContext
.getCurrentInstance().getViewRoot()
.findComponent("formulario:slideshow1");
*/
//slide2 = (HtmlPanelGroup) FacesContext
//.getCurrentInstance().getViewRoot()
//.findComponent("formulario:slideshow2");
//slide1.getChildren().clear();
//slide2.getChildren().clear();
slideshow1.getChildren().clear();
slideshow2.getChildren().clear();
idLocalizacao = (Integer) FacesUtil.getSession().getAttribute("idLocalizacao");
System.out.println("id"+idLocalizacao);
if(this.getIdLocalizacao()!=null)
{
System.out.println("idL != null");
Localizacao l = JPAUtil.findEntity(Localizacao.class, this.getIdLocalizacao());
List<Localizacao> localizacoes = new ArrayList<>();
localizacoes.add(l);
tempTextos = TextoDAO.listarTextosValidosPorUsuario
(0, "", localizacoes, null, null, null);
if(textos != null)
{
textosDiff = ListUtils.subtract(tempTextos, textos);
}
else{
textosDiff = tempTextos;
}
for(int i=0; i < textosDiff.size(); i++)
{
System.out.println("diff existe");
if(i%2==0)
{
List<String> paths = getPaths((Texto) textosDiff.get(i));
for (String string : paths)
{
//slide1.getChildren().add(createImg(string));
slideshow1.getChildren().add(createImg(string));
}
}
else
{
List<String> paths = getPaths((Texto) textosDiff.get(i));
for (String string : paths)
{
//slide2.getChildren().add(createImg(string));
slideshow2.getChildren().add(createImg(string));
}
}
}
textos = tempTextos;
}
}
catch(Exception e) { e.printStackTrace(); }
}