Um dos mais comuns pedidos dos usuários de sistemas é que possam pesquisar dados em tabelas sem a preocupação com acentos. Há várias maneiras de implementar esse recurso, mas vou mostrar hoje uma maneira bastante simples e direta.
Dois passos simples para filtrar dados ignorando os acentos, independente de tecnologia de bancos de dados, utilizando Primefaces:
Dois passos simples para filtrar dados ignorando os acentos, independente de tecnologia de bancos de dados, utilizando Primefaces:
1 - Criar um método no ManagedBean para gerar uma string sem acentos:
1. | |
2. | |
3. | |
4. | } |
5. | String semAcentos = s.toLowerCase(); |
6. | semAcentos = semAcentos.replaceAll("[áàâãä]", "a"); |
7. | semAcentos = semAcentos.replaceAll("[éèêë]", "e"); |
8. | semAcentos = semAcentos.replaceAll("[íìîï]", "i"); |
9. | semAcentos = semAcentos.replaceAll("[óòôõö]", "o"); |
10. | semAcentos = semAcentos.replaceAll("[úùûü]", "u"); |
11. | semAcentos = semAcentos.replaceAll("ç", "c"); |
12. | semAcentos = semAcentos.replaceAll("ñ", "n"); |
13. | |
14. | } |
2- Utilizar o filtro do Primefaces com uma expressão que tenha a string original (com acentos) e a string sem acentos, como pode ser visto na linha 16 abaixo:
1. | <p:dataTable id="Tabela" style="width: 100%; font-size: 0.95em" |
2. | widgetVar="wTabela" |
3. | rowIndexVar="rownumber" |
4. | var="item" |
5. | value="#{bean.pessoas}" |
6. | paginator="true" |
7. | lazy="false" |
8. | currentPageReportTemplate="{currentPage} de {totalPages}" |
9. | rows="10" |
10. | pageLinks="7" |
11. | rowsPerPageTemplate="10,20,50,100"> |
12. | ... |
13. | <p:column sortBy="#{item.nome}" |
14. | style="white-space: normal" |
15. | filterMatchMode="contains" |
16. | filterBy="#{item.nome}#{bean.removeAcentos(item.nome)}" > |
17. | <h:outputText value="#{item.nome}" /> |
18. | </p:column> |
Desta maneira, podemos pesquisar tanto José como Jose, pois a comparação vai ser feita com a string "joséjose", lembrando que o Primefaces já ignora maiúsculas e minúsculas.
Muito bom post Roselito! Obrigado!
ResponderExcluirCom relação ao método removeAcentos, encontrei uma versão que utiliza a classe java.text.Normalizer.
Segue como sugestão de melhoria:
public String removeAcentos(String str) {
str = Normalizer.normalize(str, Normalizer.Form.NFD);
str = str.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
//
return str;
}
Hola gracias por tu post
ResponderExcluirque JDK, Primefaces, JSF, server usas
Yo esoty utilizando el JDK 7 primefaces 4 JSF 2.2 y apache tomacat 7
y
tambien
JDK 6 primefaces 4 JSF 2.2 y apache tomcat 6
pero los dos botan error
Estranho e meu não ter funcionado. :(
ResponderExcluirMuito bom, obrigado!
ResponderExcluir