Boa tarde galera!
Estou com problema na tela de listagem de Cursos, pois o mesmo não atualiza o formulário após tentar deletar um curso filtrado na lista, o campo é deletado, porém sou obrigado a dar um “refresh” na página para que a linha desapareça. Tentei usar o atributo FILTEREDVALUE, sem sucesso até o momento.
Sem o filtro, eu removo normalmente!
CursoBean.java
package escola.musica.bean;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import escola.musica.dao.CursoDAO;
import escola.musica.dao.GenericDAO;
import escola.musica.modelo.Curso;
import escola.musica.modelo.TipoCurso;
@ManagedBean
@ViewScoped
public class CursoBean implements Serializable {
private static final long serialVersionUID = -862660658464075437L;
private Curso curso;
private List<TipoCurso> tipos;
private List<Curso> cursos = new ArrayList<Curso>();
private List<Curso> cursosAccordion = new ArrayList<Curso>();
private List<Curso> cursosFiltrados;
private Curso cursoExclusao;
// Gerados manualmente
public void iniciarBean() {
cursos = new CursoDAO().listarTodos();
cursosAccordion = CursoDAO.listarCursosAccordion();
tipos = Arrays.asList(TipoCurso.values());
}
public void novoCurso() {
curso = new Curso();
}
public void salvar() throws InterruptedException {
Thread.sleep(2000);
new GenericDAO<Curso>(Curso.class).salvar(curso);
cursos = new GenericDAO<Curso>(Curso.class).listarTodos();
// Exibe painel de listagem
curso = null;
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro", "Curso cadastrada com sucesso."));
}
public void excluir() {
new CursoDAO().excluir(cursoExclusao);
cursos = new CursoDAO().listarTodos();
cursosFiltrados = null;
}
public void voltar() {
this.curso = null;
}
public String getDataAtual() {
return new SimpleDateFormat("dd/MM/yyyy").format(new Date());
}
// GET e SET
public Curso getCursoExclusao() {
return cursoExclusao;
}
public List<Curso> getCursosFiltrados() {
return cursosFiltrados;
}
public void setCursosFiltrados(List<Curso> cursosFiltrados) {
this.cursosFiltrados = cursosFiltrados;
}
public void setCursoExclusao(Curso cursoExclusao) {
this.cursoExclusao = cursoExclusao;
}
public List<Curso> getCursosAccordion() {
return cursosAccordion;
}
public void setCursosAccordion(List<Curso> cursosAccordion) {
this.cursosAccordion = cursosAccordion;
}
public void editar(Curso curso) {
this.curso = curso;
}
public void prepararExclusao(Curso curso) {
this.cursoExclusao = curso;
}
public List<Curso> getCursos() {
return cursos;
}
public void setCursos(List<Curso> cursos) {
this.cursos = cursos;
}
public List<TipoCurso> getTipos() {
return tipos;
}
public void setTipos(List<TipoCurso> tipos) {
this.tipos = tipos;
}
public Curso getCurso() {
return curso;
}
public void setCurso(Curso curso) {
this.curso = curso;
}
}
curso_lista.xhtml
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<p:panel header="Cursos Cadastrados" style="width:90%;"
rendered="#{cursoBean.curso == null}">
<p:commandButton icon="fa fa-plus" value="Novo Curso" action="#{cursoBean.novoCurso}"
update="curso_form"/>
<br/><br/>
<p:dataTable value="#{cursoBean.cursos}" var="curso" filteredValue="#{cursoBean.cursosFiltrados}"
paginator="true" rows="10" rowsPerPageTemplate="5, 10, 15"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink}
{PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
id="tabela-cursos">
<p:column style="width:300px;"
sortBy="#{curso.nome}" filterBy="#{curso.nome}"
filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Nome"/>
</f:facet>
<h:outputText value="#{curso.nome}"/>
</p:column>
<p:column headerText="Duração" style="width:80px;"
sortBy="#{curso.duracao}">
<h:outputText value="#{curso.duracao}"/>
</p:column>
<p:column headerText="Tipo" filterBy="#{curso.tipo.label}"
filterMatchMode="contains">
<h:outputText value="#{curso.tipo.label}"/>
</p:column>
<p:column headerText="Data Criação" sortBy="#{curso.dataCriacao}">
<h:outputText value="#{curso.dataCriacao}">
<f:convertDateTime pattern="dd/MM/yyyy"/>
</h:outputText>
</p:column>
<p:column style="text-align:center;" exportable="false">
<p:commandButton icon="editar-icon" action="#{cursoBean.editar(curso)}"
style="color:blue;" update=":curso_form"/>
<p:commandButton icon="excluir-icon"
actionListener="#{cursoBean.prepararExclusao(curso)}"
oncomplete="PF('confirmarExclusaoDialog').show();"
style="color:red; margin-left:20px;" update="@form"/>
</p:column>
</p:dataTable>
<br/>
<h:commandLink>
<p:graphicImage value="/resources/imagens/exportar_xls.png"/>
<p:dataExporter type="xls" target="tabela-cursos"
fileName="cursos" />
</h:commandLink>
<h:commandLink style="margin-left:10px;">
<p:graphicImage library="imagens" name="exportar_pdf.png"/>
<p:dataExporter type="pdf" target="tabela-cursos"
fileName="cursos" encoding="iso-8859-1"/>
</h:commandLink>
<p:confirmDialog
message="Deseja realmente excluir o curso #{cursoBean.cursoExclusao.nome}?"
widgetVar="confirmarExclusaoDialog">
<p:commandButton value="Sim" action="#{cursoBean.excluir}"
oncomplete="PF('confirmarExclusaoDialog').hide();" update=":curso_form:tabela-cursos"/>
<p:commandButton value="Não" oncomplete="PF('confirmarExclusaoDialog').hide();"/>
</p:confirmDialog>
</p:panel>
</html>