2012-06-25 23 views
7

Ho un problema con la codifica utf-8 in primefaces 3. ma con this (aggiungendo il filtro per la codifica dei caratteri in web.xml), il problema è risolto. Ma ho un altro filtro per primefaces fileupload nel mio web.xml. Nelle pagine che ci sono file caricati, anche senza caricare nulla, il mio filtro di codifica dei caratteri non funziona e set di caratteri utf-8 con valori sconosciuti, proprio come quando non c'era nessun filtro per il caricamento. Come posso usare questo filtro insieme?primefaces fileupload filtro con filtro utf8 caratteri

risposta

12

Questo è un bug in MultipartRequest di PrimeFaces. E 'utilizzando la codifica dei caratteri piattaforma predefinita per i campi modulo invece di quello impostato nella richiesta HTTP servlet come fatto da HttpServletRequest#setCharacterEncoding() nel filtro codifica dei caratteri (che presumo sia stato mappato in web.xmlprima le primefaces FileUploadFilter).

In sostanza, la linea 85 e 88 del MultipartRequest in primefaces 3,3

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

ha bisogno di essere cambiato come segue

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

Ho riferito come issue 4266. Nel frattempo, la soluzione migliore è quella di correggere manualmente la stringa di codifica non corretta nel metodo sostenere azioni di fagioli come segue, partendo dal presupposto che la codifica di default piattaforma server è ISO-8859-1:

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

metodo addFormParam non ha parametro di richiesta così ho inviato parametro di richiesta a questo metodo come addFormParam (richiesta HttpServletRequest, voce FileItem) e ho fatto quello che hai detto: formParams.get (item.getFieldName())) aggiungere (item.getString (request.getCharacterEncoding())).; ma non ha funzionato !!! che cosa posso fare? – zorro6064

+1

Ho modificato la risposta, c'è un'altra riga che deve essere cambiata. La 'richiesta' può essere omessa, è un' HttpServletRequestWrapper'. – BalusC

+0

Caro BalusC, grazie per la tua utile risposta. Il mio problema risolto – zorro6064

3

In sostanza, è necessario il seguente riga di codice per risolvere questo problema:

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