Neste post vou mostrar como destacar na coluna do dataTable do Primefaces o texto que o usuário digita no filtro. São 5 passos bem simples, mostrados a seguir:
i) Criar no managed bean o método removeAcentos, como foi mostrado no post anterior.
ii) Fazer um binding da tabela:
| 1. | <p:dataTable id="Tabela" |
| 2. | binding="#{controlador.tabela}" |
| 1. | |
| 2. | |
| 3. | |
| 4. | |
| 5. | } |
| 6. | |
| 7. | |
| 8. | this.tabela = tabela; |
| 9. | } |
iii) Chamar um método para retornar o texto destacado, e usar escape="false":
| 1. | <p:column headerText="Título" |
| 2. | filterBy="#{registro.titulo}#{controlador.removeAcentos(registro.titulo)}" |
| 3. | filterMatchMode="contains" > |
| 4. | <h:outputText value="#{controlador.highlight(registro.titulo,'titulo}#{controlador.removeAcentos(registro.titulo)')}" |
| 5. | escape="false" /> |
| 6. | </p:column> |
O segundo parâmetro do método é o conteúdo do filterBy sem o identificador inicial e sem a chave final (ou seja, usar somente a parte destacada em verde, ignorando as partes vermelhas):
#{registro. titulo}#{controlador.removeAcentos(registro.titulo) }
Este comportamento é do médoto getFilters da tabela, como poderemos ver posteriormente no quinto passo.
iv) Criar, no managed bean, o método para montar o texto destacado:
| 1. | |
| 2. | String retorno = ""; |
| 3. | Integer posicao = 0, tam = filtro.length(); |
| 4. | |
| 5. | |
| 6. | |
| 7. | } |
| 8. | |
| 9. | retorno += StringUtils.substring(texto, posicao); |
| 10. | |
| 11. | } |
| 12. | |
| 13. | retorno += <span style="color: red;'>" + StringUtils.substring(texto, posicao, posicao + tam) + "</span>"; |
| 14. | posicao += tam; |
| 15. | } else { |
| 16. | retorno += StringUtils.substring(texto, posicao, posicao + 1); |
| 17. | posicao++; |
| 18. | } |
| 19. | } |
| 20. | |
| 21. | } |
v) Criar, no managed bean, o método para obter o valor digitado e retornar o destaque:
| 1. | |
| 2. | String retorno = ""; |
| 3. | |
| 4. | Map<String, String> filtros = tabela.getFilters(); |
| 5. | String textoDigitado = filtros.get(filtro); |
| 6. | |
| 7. | retorno = buildHighlight(textoDigitado, texto); |
| 8. | } else { |
| 9. | |
| 10. | } |
| 11. | } |
| 12. | |
| 13. | } |
Veja um exemplo que filtra o texto "Aneis" (sem acentos!) e destaca o texto encontrado (com acentos!):
Este recurso foi implementado a partir da necessidade de visualizar mais facilmente palavras que são digitadas sem acento e que aparecem no texto da coluna com acento. Quando as palavras são bem específicas, a visualização é mais fácil, mas quando são palavras pequenas e o texto da coluna tem várias linhas, o destaque mostrado acima é essencial.

Este comentário foi removido pelo autor.
ResponderExcluirStringUtils é classe de que pacote? qual será importado ao projeto?
ResponderExcluirOlá Roselito, StringUtils é classe de qual pacote? Qual será importado ao meu projeto?
ResponderExcluir