过滤一个primefaces数据表?

时间:2014-09-11 16:15:35

标签: jsf jsf-2 primefaces datatable

我正在尝试为一个dataTable创建一个过滤器。我希望该过滤器适用于datatable中包含的所有关键字。

我正在关注以下示例:http://www.primefaces.org/showcase/ui/data/datatable/filter.xhtml 但我无法做到这一点。

问题是,当我输入任何关键字时,dataTable显示消息"未找到关键字",如果我删除关键字,则所有结果都不会返回并显示消息"未找到关键字& #34;保持。

我该如何解决这个问题?

我在这里尝试。

XHTML

<p:dataTable id="tabelaAlunos" widgetVar="tableAlunos"
                                        value="#{alunoMB.alunos}" var="x"                                       
                                        emptyMessage="No keyword found"                                     
                                        selectionMode="single"
                                        selection="#{matriculaMB.aluno}"
                                        rowKey="#{x.id}"
                                        filteredValue="#{alunoMB.alunos}"                                                                          
                                        >   
                        <f:facet name="header">
                            <p:outputPanel>
                                <h:outputText value="Filtrar: " />
                                    <p:inputText id="globalFilter"
                                                 onkeyup="PF('tableAlunos').filter()"                                                                                                 
                                                 style="width:150px" placeholder="Filtro"/>
                            </p:outputPanel>
                        </f:facet>  

                        <p:column headerText="Nome">
                                <h:outputText value="#{x.nome}"/>
                        </p:column>
                        <p:column headerText="Sobrenome">
                                <h:outputText value="#{x.sobreNome}"/>
                        </p:column>
                        <p:column headerText="Endereço">
                                <h:outputText value="#{x.endereco.endereco}"/>
                        </p:column>
                        <p:column headerText="Número">
                                <h:outputText value="#{x.endereco.numero}"/>
                        </p:column>
                        <p:column headerText="Cidade">
                                <h:outputText value="#{x.endereco.cidade}"/>
                        </p:column>
                        <p:column headerText="Bairro">
                                <h:outputText value="#{x.endereco.bairro}"/>
                        </p:column>
                        <p:column headerText="Unidade escolar">
                                <h:outputText value="#{x.unidadeEscolar.nome}"/>
                        </p:column>
                </p:dataTable>

Managed Bean Aluno

@ManagedBean
@ViewScoped
public class AlunoMB implements Serializable{   
    private static final long serialVersionUID = 1L;

    private Aluno bean;
    private GenericDAO<Aluno> dao;
    private List<Aluno> alunos = null;
    private String[] sexo = {"M", "F"};
    private String telefone = "";

    /** persiste o objeto */
    public void insert(Aluno a){        
        dao = new GenericDAO<Aluno>(Aluno.class);
        dao.insert(a);
        alunos.add(a);
        bean = new Aluno();

        FacesContext context = FacesContext.getCurrentInstance();        
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso" ,"Cadastro realizado com sucesso!"));       
    }

    /** altera o objeto */
    public void update(Aluno a){
        dao = new GenericDAO<Aluno>(Aluno.class);
        dao.update(a);      
    }

    /** prepara para inserir o objeto */
    public void prepareCreate(){
        bean = new Aluno();     
    }

    /** retorna o objeto */
    public Aluno getBean() {
        return bean;
    }

    /** define o objeto */
    public void setBean(Aluno bean) {
        this.bean = bean;
    }


    /** retorna uma lista do objeto */
    public List<Aluno> getAlunos() {        
        if(alunos == null){
            dao = new GenericDAO<Aluno>(Aluno.class);
            alunos = dao.findAll();
        }
        return alunos;
    }

    /** seta uma lista do objeto */
    public void setAlunos(List<Aluno> alunos) {
        this.alunos = alunos;
    }

Managed Bean Matricula

 @ManagedBean
@ViewScoped
public class MatriculaMB implements Serializable{   
    private static final long serialVersionUID = 1L;

    private Matricula bean = new Matricula();
    private GenericDAO<Matricula> dao;
    private List<Matricula> matriculas = null;  
    private Turma turma;
    private Aluno aluno = null;


    /** persiste um novo objeto */
    public void insert(Matricula m){        
        dao = new GenericDAO<Matricula>(Matricula.class);
        dao.insert(m);
        matriculas.add(m);
        bean = new Matricula();

        FacesContext context = FacesContext.getCurrentInstance();        
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso" ,"Cadastro realizado com sucesso!"));       
    }

    /** altera o objeto existente */
    public void update(Matricula m){
        dao = new GenericDAO<Matricula>(Matricula.class);
        dao.update(m);      
    }

    /** prepara para inserir uma nova matricula */
    public void prepareCreate(){
        bean = new Matricula();     
    }

    /** retorna o objeto */
    public Matricula getBean() {
        return bean;
    }

    /** define o objeto */
    public void setBean(Matricula bean) {
        this.bean = bean;       
    }


    /** retorna uma lista do objeto */
    public List<Matricula> getMatriculas() {
        dao = new GenericDAO<Matricula>(Matricula.class);
        if(matriculas == null){
            matriculas = dao.findAll();
        }
        return matriculas;
    }



    public Turma getTurma() {
        return turma;
    }

    public void setTurma(Turma turma) {         
        this.turma = turma;     
    }

    /** adiciona turma ao aluno */
    public void addTurmaAluno(){
        if(!bean.getAluno().getTurmas().contains(turma)){           
            bean.getAluno().addTurmas(this.turma);      
        }           
    }


    public Aluno getAluno() {
        return aluno;
    }

    public void setAluno(Aluno aluno) {
        this.aluno = aluno;
        bean.setAluno(this.aluno);
    }

1 个答案:

答案 0 :(得分:1)

只需为每列添加filteBy。

<p:column headerText="Nome" filterBy="#{x.nome}">
    <h:outputText value="#{x.nome}"/>
</p:column>