[Resolvido] Vraptor + AJAX com Jquery + sitemesh = problemas com encoding

10 respostas
clincks

Opa pessoal…

ja perdi algum tempo tentando descobrir oq estou fazendo errado no meu proj.
Vou postar aqui os códigos que acho que podem gerar o erro de encoding

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">


	<context-param>
		<param-name>br.com.caelum.vraptor.encoding</param-name>
		<param-value>UTF-8</param-value>
	</context-param>

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/applicationContext.xml</param-value>
	</context-param>

	<filter>
		<filter-name>vraptor</filter-name>
		<filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
	</filter>

	<filter>
		<filter-name>sitemesh</filter-name>
		<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>sitemesh</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<filter-mapping>
		<filter-name>vraptor</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>REQUEST</dispatcher>
	</filter-mapping>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>


	<jsp-config>
		<jsp-property-group>
			<url-pattern>*.jsp</url-pattern>
			<page-encoding>UTF-8</page-encoding>
			<include-prelude>/WEB-INF/jsp/prelude.jspf</include-prelude>
		</jsp-property-group>
	</jsp-config>
	
	<error-page>
    	<error-code>404</error-code>
    	<location>/WEB-INF/jsp/erro/erro404.jsp</location>
	</error-page> 
</web-app>

decorator.jsp:

<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator"
	prefix="decorator"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />

...

exemplo de uma função Jquery usando a função ajax():

function cadastroCliente(){
	$.ajax({
		type : 'GET',
		url : '/site/cliente/cadastro',
		success : function(txt) {
			$("#bodyDiv").html(txt)
			closeErrorMessage();
		},
		error : function(txt) {
			showErrorMessage(txt.responseText)
		}
	});
}

O código html que está na página decorator.jsp não apresenta erros na codificação,
mas o html gerado nas requisições AJAX vêem descodificadas…

Alguem conhece o motivo?

Obrigado

10 Respostas

Lucas_Cavalcanti

qual versão do VRaptor?

clincks

Lucas,

estou usando o vraptor-3.3.1.jar

Obrigado

starkiller

Cara vc ta esquecendo de setar o tipo de reposta de sua requisição, na sua chamada Ajax…tenta setar isso: datatype:“html”, essa propriedade é um dosagumentos de sua requisição Ajax…As repostas podem ser desde texto a um Json, setando o tipo de resposta, vc garente que eles venham encodados corretamente!

Lucas_Cavalcanti

clincks, tá dando erro na hora de enviar ou de receber a resposta ajax?

clincks

starkiller:
Cara vc ta esquecendo de setar o tipo de reposta de sua requisição, na sua chamada Ajax…tenta setar isso: datatype:“html”, essa propriedade é um dosagumentos de sua requisição Ajax…As repostas podem ser desde texto a um Json, setando o tipo de resposta, vc garente que eles venham encodados corretamente!

Starkiller, imagino que o caminho seja por ae msm, pois apenas as páginas carregas pelas funções ajax estão com o charset errado.

Tentei sua solução, mas também nao funcionou. Já tentei esses argumentos abaixo para a função ajax e não funcionou

$.ajax({
		type : 'GET',
		url : '/site/cliente/cadastro',
		datatype: 'html',
		contentType: 'text/html;charset=UTF-8',
		scriptCharset: 'utf-8' ,
                //....
clincks

Lucas,
na resposta ajax, os caracteres especiais veem todos com o famoso ‘?’

Lucas_Cavalcanti

tenta ver no firebug (instale ele no seu firefox se não tiver) e veja os cabeçalhos de resposta

clincks

Lucas, não apresenta nenhum erro…
veja que o request e o response está em utf-8.

[URL=http://imageshack.us/photo/my-images/15/71456068.png/][/URL]

Uploaded with [URL=http://imageshack.us]ImageShack.us[/URL]

Lucas_Cavalcanti

se vc trocar pra POST ele vai com o encoding certo?

clincks

Lucas,

sua pergunta resolveu o problema.
Inseri no banco strings com caracteres especiais e na listagem eles foram exibidos corretamente.

Só apareciam decodificados os textos que estavam em algumas páginas .jsp.

O problema era que alguns aquivos estavam gravados como ISO.

Valeu a ajuda…
Até +

Criado 3 de outubro de 2011
Ultima resposta 5 de out. de 2011
Respostas 10
Participantes 3