2012-05-23 4 views
10

In uno dei progetti sono disponibili contenuti non in lingua inglese (finlandese) sui dati dei moduli. Stiamo usando JSF 2.0 con PrimeFaces. Ho problemi durante l'invio dei dati al server. I dati si corrompono quando invio il modulo. Solo i personaggi finlandesi si stanno corrompendo in questo.Il modulo UTF-8 di invio in JSF sta corrompendo i dati

Qualcuno ha già affrontato questo problema e ha trovato una soluzione?

+0

Si sta caricando un file durante l'invio? Ho sviluppato app in lingua ceca e questo mi è successo con il componente di caricamento file IceFaces. Ma nei casi normali andava tutto bene. Puoi usare Filter per impostare il charset Finlandese ma è ancora un errore strano –

risposta

20

Questo è un problema noto da PrimeFaces 3.0. È causato da un cambiamento nel modo in cui controlla se la richiesta HTTP corrente è una richiesta Ajax. È stato identificato da un parametro di richiesta anziché da un'intestazione di richiesta. Quando un parametro di richiesta viene recuperato per la prima volta prima che la vista JSF venga ripristinata, tutti i parametri di richiesta verranno analizzati utilizzando la codifica dei caratteri predefinita del server, che è spesso ISO-8859-1 invece della codifica dei caratteri predefinita di JSF UTF-8. Per una spiegazione approfondita, vedere Unicode input retrieved via PrimeFaces input components become corrupted.

Una delle soluzioni è creare un filtro che fa un request.setCharacterEncoding("UTF-8").

@WebFilter("*.xhtml") 
public class CharacterEncodingFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
     request.setCharacterEncoding("UTF-8"); 
     chain.doFilter(request, response); 
    } 

    // ... 
} 
+0

Ha funzionato per me con la seguente annotazione: @WebFilter (filterName = "CharacterEncodingFilter", urlPatterns = {"/ *"}) Grazie – Kiavash

+2

@Kia: apparentemente il tuo 'FacesServlet' non è stato mappato su' * .xhtml', ma su qualcos'altro come '/ faces/*' o '* .jsf'. Dovresti quindi cambiare il pattern URL del filtro per essere lo stesso. '/ *' Corrisponderà effettivamente ** ogni singola richiesta HTTP. A proposito, anche '@WebFilter ("/* ")' era sufficiente. – BalusC

Problemi correlati