Tenho um datatable com uma coluna que preciso filtrar com o componente p:selectCheckboxMenu, porém este não funciona. Mas se eu coloco para filtrar somente com o filtro básico do datatable, que é a pesquisa por nome, ele funciona.
A parte do datatable que não funciona
<p:dataTable id="monografiasDataTable" widgetVar="monografiaTable"
value="#{gestaoMonografiasBean.listaMonografias}" var="monografia"
emptyMessage="Nenhuma informação a ser exibida" paginator="true"
rows="10" paginatorPosition="bottom" selectionMode="single"
selection="#{gestaoMonografiasBean.monografia}"
rowKey="#{monografia.id}" filteredValue="#{gestaoMonografiasBean.listaMonografiasFiltradas}" >
<p:column filterBy="#{monografia.listaLinhaPesquisas[0].nome}" headerText="Linha de Pesquisa">
<f:facet name="filter" >
<p:selectCheckboxMenu label="Linha de Pesquisa" value="#{gestaoMonografiasBean.listaMonografiasFiltradas}"
onchange="PF('monografiaTable').filter()"
converter="omnifaces.SelectItemsConverter">
<f:attribute name="collectionType" value="java.util.ArrayList" />
<f:selectItems
value="#{gestaoMonografiasBean.listaLinhaPesquisas}"
var="listaLinhaPesquisas"
itemLabel="#{listaLinhaPesquisas.nome}"
itemValue="#{listaLinhaPesquisas}" />
</p:selectCheckboxMenu>
</f:facet>
<h:outputText value="#{monografia.listaLinhaPesquisas[0].nome}" />
</p:column>
O bean
@PostConstruct
private void iniciar() {
monografia = new Monografia();
this.monografia.setLinhaPesquisa(new LinhaPesquisa());
aluno = new Aluno();
this.aluno.setPessoa(new Pessoa());
professor = new Professor();
this.professor.setPessoa(new Pessoa());
listaLinhaPesquisas = linhaPesquisas.todas();
listaMonografias = monografias.todas();
}
public void prepararNovaMonografia() {
monografia = new Monografia();
this.monografia.setLinhaPesquisa(new LinhaPesquisa());
}
public void prepararEdicao() {
professorConverter = new ProfessorConverter(Arrays.asList(monografia.getProfessor()));
alunoConverter = new AlunoConverter(Arrays.asList(monografia.getAluno()));
listaMonografiasFiltradas = monografias.todas();
}
public void salvar() {
try {
cadastroMonografiaService.salvar(monografia);
atualizarRegistros();
messages.info("Monografia salva com sucesso!");
RequestContext.getCurrentInstance().update(Arrays.asList("frm:monografiasDataTable", "frm:messages"));
} catch (Exception erro) {
erro.printStackTrace();
}
}
public void pesquisar() {
listaMonografias = monografias.pesquisar(termoPesquisa);
if (listaMonografias.isEmpty()) {
messages.info("Sua consulta não retornou registros.");
}
}
public void todasMonografias() {
listaMonografias = monografias.todas();
}
public List<Professor> completarProfessor(String termo) {
List<Professor> listaProfessores = professores.pesquisar(termo);
professorConverter = new ProfessorConverter(listaProfessores);
return listaProfessores;
}
public List<Aluno> completarAluno(String termo) {
List<Aluno> listaAlunos = alunos.pesquisar(termo);
alunoConverter = new AlunoConverter(listaAlunos);
return listaAlunos;
}
public List<LinhaPesquisa> getSelecionarLinhaPesquisa(String termo) {
List<LinhaPesquisa> listaLinhaPesquisas = linhaPesquisas.pesquisar(termo);
linhaPesquisaConverter = new LinhaPesquisaConverter(listaLinhaPesquisas);
return listaLinhaPesquisas;
}
private void atualizarRegistros() {
if (jaHouvePesquisa()) {
pesquisar();
} else {
todasMonografias();
}
}
private boolean jaHouvePesquisa() {
return termoPesquisa != null && !"".equals(termoPesquisa);
}
public List<Monografia> getListaMonografias() {
return listaMonografias;
}
public void setListaMonografias(List<Monografia> listaMonografias) {
this.listaMonografias = listaMonografias;
}
public List<Monografia> getListaMonografiasFiltrada