Problemas com caracteres acentuados com VRaptor3 + GAE + Multipart Form + UTF-8 [RESOLVIDO]

3 respostas
mhnagaoka

Oi, pessoal.

Estou testando o VRaptor 3 em uma app que estou fazendo p/ rodar no GAE/J (Google App Engine Java) e estou tendo problemas com POST de formulários multipart/form-data com campos texto com conteúdo acentuado.

Tenho um form mais ou menos assim:
<form accept-charset="utf-8" method="post" ACTION="/price/upload" ENCTYPE='multipart/form-data'>
	Arquivo CSV:<input type="file" name="csvFile">
	Cidade-UF:<input type="text" name="town" />
	<input type="submit"name="submit" value="Upload" />
</form>
O deployment descriptor web.xml está mais ou menos assim:
<context-param>
	<param-name>br.com.caelum.vraptor.packages</param-name>
	<param-value>br.com.caelum.vraptor.gae</param-value>
</context-param>
<context-param>
	<description>VRaptor handles HTTP requests in UTF-8 format</description>
	<param-name>br.com.caelum.vraptor.encoding</param-name>
	<param-value>UTF-8</param-value>
</context-param>
No meu controller, eu tenho algo assim:
@Path("/price/upload")
public void upload(String town, UploadedFile csvFile)

Porém, quando digito "Caçapava-SP" na caixa de texto Cidade-UF, o parâmetro town vem com uns caracteres "malucos" no lugar do 'ç', típicos de quando o encoding está errado.

Eu notei que se eu tiro o atributo ENCTYPE='multipart/form-data' do formulário, o nome da cidade vem correto. Obviamente, neste caso, o conteúdo do arquivo não é enviado.

Andei procurando neste fórum e no Google, mas não encontrei nenhuma solução p/ este problema que, aparentemente, está relacionado com o jeito com que o VRaptor trata os parâmetros quando o form é multipart/form-data.

Se alguém já teve este problema ou puder dar alguma luz, agradeço desde já.

[]s
Mauricio

3 Respostas

mhnagaoka

Pra não alongar muito o post anterior (descrevendo o problema), vou postar aqui alguns resultados de um debug que estou fazendo.

A classe br.com.caelum.vraptor.interceptor.multipart.MultipartItemsProcessor realiza o processamento do conteúdo multipart/form-data no trecho abaixo:

public void process() { Multimap<String, String> params = LinkedListMultimap.create(); for (FileItem item : items) { if (item.isFormField()) { params.put(item.getFieldName(), item.getString()); continue; } // Restante do código omitido p/ brevidade

Aparentemente, o problema está na chamada a item.getString(), na linha 5 do trecho acima. Neste caso, acho que a chamada deveria ser a item.getString(encoding), onde encoding seria o que quer que esteja setado no context-param br.com.caelum.vraptor.encoding. “UTF-8”, no meu caso.

[]s
Mauricio

Lucas_Cavalcanti

corrigido… baixe o snapshot: http://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.1.2-SNAPSHOT/vraptor-3.1.2-20100214.025052-1.jar

ou se estiver usando o maven, adicione o snapshot repository http://oss.sonatype.org/content/repositories/snapshots/ e troque a versão do vraptor pra 3.1.2-SNAPSHOT

[]'s

mhnagaoka

Valeu, cara! Funcionou aqui! :smiley:

Criado 13 de fevereiro de 2010
Ultima resposta 14 de fev. de 2010
Respostas 3
Participantes 2