Ignorar acentuação em um filtro
27/10/2015 09:13
1
Bom dia a todos.
Estou dando manutenção em um sistema em Grails e tenho o seguinte código.

def index() {
params.max = Math.min(params.max ? params.int('max') : Constantes.MINIMO_PAGINACAO, Constantes.MAXIMO_PAGINACAO)
registros = Departamento.createCriteria().list(params) {
  if (params.query) {
if(params.tipo == "Sigla")
ilike("sigla", "%${params.query}%")
else
ilike("nome", "%${params.query}%")
  }
}
respond registros, model:[departamentoInstanceTotal: registros.totalCount]
}


Eu preciso que o filtro por "nome" ignore acentuação.
Tem algum método que eu possa usar para fazer isso no fonte, sem precisar criar select's que façam isso?

Abs.
Tags: Grails Acentuação Filtro ilike


1
Se for para remover os acentos vindos do formulário, é só criar um método que faça isso. Exemplo:

public static String formatString(String s) {
String temp = java.text.Normalizer.normalize(s, java.text.Normalizer.Form.NFD);
return temp.replaceAll("[^\p{ASCII}]","");
}

Se for para remover os acentos vindos do banco, vc terá que colocar no campo da tabela um collate que seja accent insensitive.
Exemplos:
http://www.grailsbrasil.com.br/post/show/1357
http://www.devmedia.com.br/funcao-para-retirar-acento/17293
http://www.devmedia.com.br/funcao-sql-que-remove-acentos-de-strings/2273


0
Na verdade o que eu gostaria não é apenas retirar o acento. Gostaria que a busca considerasse os dois casos, por exemplo: Se o usuário pesquisar por Informática ou Informatica, o sistema tem que retornar os mesmos departamentos.
27/10/2015 14:38


0
Então... antes de comparar o valor informado com o valor do banco, você vai ter que tirar todos os acentos do valor inserido pelo usuário, e tirar todos os acentos do valor que consta no banco (se houver). Assim você vai conseguir verificar se eles são iguais ignorando os acentos.
OBS: Use um uppercase nos dois também, para não dar diferença de minúsculas e maiúsculas.


0
Faz o que Victor indicou. Dai tu cria uma variável para armazenar o valor digitado com acentuação e outra para o valor sem acentuação e na pesquisa vc faz um "OR" .


0
Certo.. Valeu pelas dicas pessoal, mais tarde vou tentar fazer dessa forma como vocês falaram.
Muito obrigado.
27/10/2015 16:57



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto