2012-06-25 6 views
7

Tengo un problema con la codificación utf-8 en primefaces 3. pero con this (agregando filtro para la codificación de caracteres en web.xml), mi problema fue resuelto. Pero tengo otro filtro para la carga de archivos de Primefaces en mi web.xml. En las páginas que hay fileupload, incluso sin subir nada, mi filtro de codificación de caracteres no funcionan y UTF-8 conjuntos de caracteres con valores desconocidos, al igual que cuando no había ningún filtro para la carga. ¿Cómo puedo usar este filtro?filtro de carga de archivos primefaces con filtro de caracteres utf8

Respuesta

12

trata de un error en PrimeFaces' MultipartRequest. Está utilizando la codificación de caracteres predeterminada de la plataforma para los campos de formulario en lugar del establecido en la solicitud del servlet HTTP como lo hizo en HttpServletRequest#setCharacterEncoding() en el filtro de codificación de caracteres (que supongo que se ha mapeado en web.xmlantes de PrimeFaces FileUploadFilter).

Básicamente, la línea 85 y 88 de MultipartRequest en PrimeFaces 3.3

formParams.get(item.getFieldName()).add(item.getString()); 
// ... 
items.add(item.getString()); 

necesita ser cambiado de la siguiente manera

formParams.get(item.getFieldName()).add(item.getString(getCharacterEncoding())); 
// ... 
items.add(item.getString(getCharacterEncoding())); 

he reportado como issue 4266. Mientras tanto, lo mejor es fijar manualmente la cadena de codificación incorrecta en el método de acción bean de respaldo de la siguiente manera, en el supuesto de que el servidor de la plataforma de codificación por defecto es ISO-8859-1:

string = new String(string.getBytes("ISO-8859-1"), "UTF-8"); 
+0

método addFormParam no tiene parámetro pedido, por lo que envié parámetro de la petición a este método como addFormParam (solicitud de HttpServletRequest, elemento FileItem) y yo hicimos lo que le dijo: formParams.get (item.getFieldName())) añadir (item.getString (request.getCharacterEncoding())).; pero no funcionó !!! ¿que puedo hacer? – zorro6064

+1

he editado la respuesta, hay una línea más que necesita ser cambiado. La 'solicitud' se puede omitir, es un' HttpServletRequestWrapper'. – BalusC

+0

Estimado BalusC, gracias por su útil respuesta. Mi problema solucionado – zorro6064

3

En esencia, se necesita el línea de código para solucionar este problema:

new String(file.getFileName().getBytes(Charset.defaultCharset()), "UTF-8") 
Cuestiones relacionadas