1
resposta

Método precoEhMenor ñ Funciona

Olá

o meu filtro precoEhMenor não funciona, digito pelo número, ou pela moeda (ex: 20, 2, R$) e não aparece nada. Alguém poderia me ajudar no que possa estar acontecendo?

Meu método precoEhMenor:

public boolean precoEhMenor(Object valorColuna, Object filtroDigitado, Locale locale) { // java.util.Locale

        //tirando espaços do filtro
        String textoDigitado = (filtroDigitado == null) ? null : filtroDigitado.toString().trim();

        System.out.println("Filtrando pelo " + textoDigitado + ", Valor do elemento: " + valorColuna);

        // o filtro é nulo ou vazio?
        if (textoDigitado == null || textoDigitado.equals("")) {
            return true;
        }

        // elemento da tabela é nulo?
        if (valorColuna == null) {
            return false;
        }

        try {
            // fazendo o parsing do filtro para converter para Double
            Double precoDigitado = Double.valueOf(textoDigitado);
            Double precoColuna = (Double) valorColuna;

            // comparando os valores, compareTo devolve um valor negativo se o value é menor do que o filtro
            return precoColuna.compareTo(precoDigitado) < 0;

        } catch (NumberFormatException e) {

            // usuario nao digitou um numero
            return false;
        }
}

Trecho da minha página livro.xhtml

                <p:column sortBy="#{livro.preco}" filterBy="#{livro.preco}"  filterFunction="#{livroBean.precoEhMenor}">
                    <f:facet name="header">Preço</f:facet>
                    <h:outputText value="#{livro.preco}">
                        <f:convertNumber type="currency" pattern="R$ #0.00"
                            currencySymbol="R$" locale="pt_BR" />
                    </h:outputText>
                </p:column>
1 resposta

Oi Ana,

No método

public boolean precoEhMenor(Object valorColuna, Object filtroDigitado, Locale locate)

Troque os Objects pelo tipo certo que você quer receber