Pessoal, preciso da ajuda de vocês com um problema que já fiz tudo que encontrei nos foruns e não resolveu.
Estou utilizando o Vraptor-3.4.1 com Json em uma tela para eliminar os refresh. Em uma das funcionalidades eu envio os parâmetros para o controller via Json e salvo os registros no banco, ocorre que os textos com acento estão chegando desconfigurados (ex.: João chega no controller João). Já fiz os ajustes mais óbvios, ex.:
Acontece que o problema permanece e ainda aumentou, pois agora as mensagens de confirmação na tela com jQuery estão desconfiguradas também.
Debugando o código percebi que o parâmetro já esta chegando errado na entrada do método e que em uma outra funcionalidade que usa a mesma tela/controller que não precisam do Json eu passo os dados para o controller através do bean e eles entram no método corretamente sem problemas nos acentos.
Rafael, obrigado pela resposta, mas não funcionou.
Uma coisa que talvez seja importante é que estou usando o sitemash, porém, no caso da sua resposta, eu coloquei a tag no head de cada jsp e também no meu arquivo header onde estão os padrões dos jsp.
O que esta muito estranho é que esta UTF-8 no sistema inteiro e as mensagens via jquery estão entrando sem acento, assim como quando mando os parâmetros para o controller via Json.
Outra coisa também é que eu inciei esse projeto em cima do “vraptor-blank-project”. Fiz pouquíssimas alterações.
Lucas os dados saem dos inputs na tela, eu pego eles pelo jquery e com o Json mando para o controller. No controller eu faço uma verificação dos dados e se são válidos salvo no banco. Ocorre que quando pego os dados na chamada do método, o que possuem acento já chegam quebrados. Nos métodos que eu consigo usar um mapeamento (bean) isso não ocorre, mas nesse caso, como estou enviando os dados via Json, estou colocando no método os atributos que preciso receber.
[quote]public void adiciona(Long idUoPai, String codigoSistema, String nome, Long idTipoAtividade, Long idTipoUnidade, String nivelCombo){
[/quote]
Olá,
Tem como você receber no seu controller o seu objeto json renderizado, isso o VRaptor faz.
Exemplo:
@Post
@Path("/salvar/meuObjetoQualquer")
@Consumes("application/json")
public void savar(MeuObjeto meuObjeto) {
//Codigo que manipula isso
}
Com relação ao encoding existe varios fatores que pode influenciar nisso, mas o que me parece é que seu projeto esta subindo usando ISO-8859-1 e ao receber a solicitação
ajax ele esta recebendo um UTF-8 por este motivo quebra a codificação por se tratar de tabelas não correlatas.
Faça um teste e manda para a gente avaliar, segue:
Veja que no contentType eu forcei ele mandar usando a tabela ISO, depois disso tente usar UFT-8 e nos diz se algum deles funcionou, para ai então iniciar-mos a
configuração necessário de enconding.
Sehores, muito obrigado pela ajuda, o problema esta resolvido.
Gostaria apenas de pedir a opnião de vocês com o seguinte: - inicialmente minhas páginas não estavam definidas como utf-8, mas com o ISO-8859-1. Ocorre que depois de algumas pesquisa para solucionar o problema com o Json, muitas pessoas falavam no uso apenas do UTF-8, mas ele, por algum motivo, esta desconfigurando as mensagens com acento por exemplo do Jquery validate.
Para resolver isso eu implementei as instruções de vocês e alterei minhas páginas para o seguinte:
Olá,
Essa configuração não esta coerente, pois você esta dizendo para a pagina ser enviada para o browser usando UTF-8 e para o browser
você esta falando para ele decodificar usando ISO-8859-1.
Se seu projeto for usar ISO, faça as seguintes configurações:
1 - Alterar o pageEncoding=“UTF-8” para pageEncoding=“ISO-8859-1”.
2 - Sempre informar no contentType da sua chamada ajax application/x-www-form-urlencoded; charset=ISO-8859-1" se vc não informar isso
o jquery irá usar o default que é application/x-www-form-urlencoded; charset=UTF-8".
Caso você for usar UTF-8 converta seus arquivos usando o seguinte código:
public static void main(String args[]) {
try {
FileInputStream fis = new FileInputStream(new File("seuArquivoUsandoISO.js"));
byte[] contents = new byte[fis.available()];
fis.read(contents, 0, contents.length);
String asString = new String(contents, "ISO-8859-1");
byte[] newBytes = asString.getBytes("UTF-8");
FileOutputStream fos = new FileOutputStream("seArquivoUsandoUFT8.js");
fos.write(newBytes);
fos.close();
} catch(Exception e) {
e.printStackTrace();
}
}
2 - Altere os contentTypes e meta de seus JSP para usar UTF-8.