Dúvida com DataTable

Olá pessoal, tudo certo?
Bem, tenho uma dataTable populada com uma lista de Objetos. Cada objeto, claro, possui vários atributos e um deles é a situação do empréstimo. Quando é setado a situação do empréstimo como Devolvido (“D”), queria que ele não aparecesse no datatable, a menos que o usuário fosse pesquisar nos filtros de consulta.
Minha dúvida é como e onde posso fazer essa validação ( se faço no xhtml mesmo ou faço no meu bean). Abaixo o dataTable.

    <p:dataTable id="tabela1" value="#{emprestimosxExemplaresJsfBean.emprestimosxexemplaresList}"
                                         var="var">


 <p:column headerText="Usuário" sortBy="#{var.emxexCodemprest.empCodusuario.usuNome}">
                                    #{var.emxexCodemprest.empCodusuario.usuNome}
                                </p:column>

                                <p:column headerText="Exemplar" sortBy="#{var.emxexCodexemplar.exeExemplar}">
                                    #{var.emxexCodexemplar.exeExemplar} - #{var.emxexCodexemplar.exeacervo.aceTitulo}
                                </p:column>

                                <p:column headerText="Data do Empréstimo" sortBy="#{var.emxexCodemprest.empDtempr}">
                                    <h:outputText value="#{var.emxexCodemprest.empDtempr}"/>
                                </p:column>

                            
                                <p:column headerText="Situacão" sortBy="#{var.emxexSituacaoCompleta}">
                                    <h:outputText value="#{var.emxexSituacaoCompleta}"/> // situação do empréstimo
                                </p:column>

 <p:column headerText="Ação"  >
                                    <p:commandButton id="confirm2" disabled="#{var.emxexDtdev != null}" update="@form" value="Devolver" action="#{emprestimosxExemplaresJsfBean.devolveExemplares()}" image="exit">
                                        <f:setPropertyActionListener target="#{emprestimosxExemplaresJsfBean.empxex}" value="#{var}"/>
                                    </p:commandButton>
                                </p:column>
   </p:dataTable>

Quem puder ajudar, Agradeço.

No bean.

Beleza, eu tenho nele um método devolveExemplares(). Poderia me ajudar a fazer essa validação?
Abaixo o método:

 public void devolveExemplares() throws Exception {
        try {
            if (empxex.getEmxexDtdev() == null) {

                long dias = DateUtil.daysBetween(empxex.getEmxexDtparadev(), new Date());

                Integer diasDeAtraso = (int) dias; // typecast long/int

                BigDecimal clcMultaDias = BigDecimal.ZERO;

                if (diasDeAtraso > 0) {
                    BigDecimal valorMulta = BigDecimal.ZERO;

                    if (empxex.getEmxexCodemprest().getEmpCodusuario().getUsuCategoria().equals("A")) {
                        valorMulta = empxex.getEmxexCodemprest().getEmpCodbiblio().getBibVlrmulaluno();
                    }
                    if (empxex.getEmxexCodemprest().getEmpCodusuario().getUsuCategoria().equals("N")) {
                        valorMulta = empxex.getEmxexCodemprest().getEmpCodbiblio().getBibVlrmulnormal();
                    }
                    if (empxex.getEmxexCodemprest().getEmpCodusuario().getUsuCategoria().equals("F")) {
                        valorMulta = empxex.getEmxexCodemprest().getEmpCodbiblio().getBibVlrmulfunc();
                    }
                    if (empxex.getEmxexCodemprest().getEmpCodusuario().getUsuCategoria().equals("P")) {
                        valorMulta = empxex.getEmxexCodemprest().getEmpCodbiblio().getBibVlrmulprof();
                    }

                    clcMultaDias = valorMulta.multiply(BigDecimal.valueOf(diasDeAtraso.longValue()));

                    empxex.setEmxexVlrmulta(clcMultaDias);

                    warn("Exemplar em atraso. Multa de R$" + clcMultaDias);

                } else {
                    empxex.setEmxexVlrmulta(clcMultaDias);
                    diasDeAtraso = 0;
                    info("Exemplar Devolvido com sucesso.");
                }
                empxex.setEmxexMultapaga("N");
                empxex.setEmxexDiasmulta(diasDeAtraso);
                empxex.setEmxexDtdev(new Date());
                empxex.setEmxexSituacao("D");
                salvaObjeto(empxex);
                e.atualizaExeSituacao(empxex.getEmxexCodexemplar(), "D");

            } else {
                warn("Exemplar já devolvido.");
            }
        } catch (Exception exception) {
            fatal("Erro Grave!! (" + exception.getMessage() + ")");
            throw exception;
        }
        
       
    }

Eu poderia fazer dentro desse método devolveExemplares() ?

Na verdade, você faz onde quiser.
O método mais adequado seria colocar uma cláusula na consulta ao banco de dados que retornasse todas as linhas em que a dita coluna esteja com valor diferente de ‘D’ (<> ‘D’).
Isso te pouparia o trabalho de iterar sobre a lista e analisar, item a item, se este valor é igual ou diferente de ‘D’.
Porém, se você não quiser mexer com o banco, pode criar um for no método que carrega a lista que preenche a datatable.

Bem, vou ter que fazer com iterator…Vou testar aqui e ver oque sai. Depois posto o código…
Vlw ae…

[quote=drsmachado]Na verdade, você faz onde quiser.
O método mais adequado seria colocar uma cláusula na consulta ao banco de dados que retornasse todas as linhas em que a dita coluna esteja com valor diferente de ‘D’ (<> ‘D’).
Isso te pouparia o trabalho de iterar sobre a lista e analisar, item a item, se este valor é igual ou diferente de ‘D’.
Porém, se você não quiser mexer com o banco, pode criar um for no método que carrega a lista que preenche a datatable.[/quote]

Bom dia, bem no meu domínio tenho o seguinte código:





 public String getEmxexSituacaoCompleta() {
        if (emxexSituacao == null ? "E" == null : emxexSituacao.equals("E")) {
            return "Emprestado";
        } else if (emxexSituacao == null ? "D" == null : emxexSituacao.equals("D")) {
            return "Devolvido";
        } else {
            return "Todos";
        }
    }

E no meu bean fiz o seguinte: criei listas para o filtro e também para entrar na tabela com somente os emprestados ou devolvidos.


  private List<EmprestimosxExemplares> devolvidos = new ArrayList<EmprestimosxExemplares>();
    private List<EmprestimosxExemplares> emprestados = new ArrayList<EmprestimosxExemplares>();
    private List<EmprestimosxExemplares> todos = new ArrayList<EmprestimosxExemplares>();

 public void retornaLista(AjaxBehaviorEvent event) {
        String situacao = emxexSituacao;
        if (situacao.equals("D")) {
            for (EmprestimosxExemplares objeto : emprestimosxexemplaresList) {
                if (objeto.getEmxexSituacao().equals("D")) {
                    devolvidos.add(objeto);
                }
            }
        } else if (situacao.equals("E")) {
            for (EmprestimosxExemplares objeto : emprestimosxexemplaresList) {
                if (objeto.getEmxexSituacao().equals("E")) {
                    emprestados.add(objeto);
                }
            }
        } else {
            for (EmprestimosxExemplares objeto : emprestimosxexemplaresList) {
                todos.add(objeto);
            }
        }
    }

No xhtml, fiz o seguinte filtro:

<p:selectOneMenu value="#{emprestimosxExemplaresJsfBean.emxexSituacao}">
                                                        <f:selectItem itemLabel="Emprestado" itemValue="E" />
                                                        <f:selectItem itemLabel="Devolvido" itemValue="D" />
                                                        <f:selectItem itemLabel="Todos" itemValue="#{null}" />
                                                    </p:selectOneMenu>

Porém, quando seleciona todos ele dá erro, mesmo debugando não consegui descobrir. Os empréstimos devolvidos e os Emprestados estão passando nas suas listas normal. Só queria aogra fazer com que só os emprestados fossem aparecer na dataTable e quando clicar em Todos me listar todos os empréstimos.
Poderia ajudar? Vlw

O correto mesmo seria filtrar pelo banco, mas seguro, mais pratico e fácil.

Aí vai de cada um, sei lá. No meu caso, como é o usuário que faz o filtro, tive que fazer sem utilizar esse método.

Mesmo sendo o usuário fazendo o filtro, você tem muito mais a ganhar pesquisando no banco.
Por exemplo, se durante o vai e vem do filtro desse usuário, alguém faz um empréstimo e muda o status para ‘D’, o registro ainda vai ficar aparecendo lá. :stuck_out_tongue: