Não está funcionando este filtro pela coluna 'preço'.
Quando digito um valor (ex. 20 ou 20,00 ou R$20,00) ele limpa tudo. E pior, antes, nas outras colunas que tem filtros, quando eu limpava o valor do filtro ele exibia todos os registros novamente. Com este filtro por preço habilitado isso não ocorre mais. Só voltou ao normal quando eu apaguei o trecho filterFunction="#{livroBean.precoEhMenor}"
Outra dúvida: onde está sendo passado o valor do parâmetro "filtroDigitado"??
Meu código:
<p:column headerText="Preço" sortBy="#{livro.preco}" filterBy="#{livro.preco}" filterFunction="#{livroBean.precoEhMenor}">
<h:outputText value="#{livro.preco}">
<f:convertNumber type="currency" pattern="R$ #0.00"
currencySymbol="R$" locale="pt_BR" />
</h:outputText>
</p:column>
Implementação do método:
boolean precoEhMenor(Object valorColuna, Object filtroDigitado, Locale 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;
}
}