2013-07-13 13 views
5

Ho lo stesso problema di Set request character encoding of JSF input submitted values to UTF-8 in GlassFish, i valori inviati arrivano come Mojibake. Tuttavia, la risposta è rivolto a GlassFish e sto usando JBoss AS 7.Imposta codifica caratteri richiesta di input JSF valori inviati a UTF-8

ho già specificato l'URL di connessione JDBC per usare UTF-8:

jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8 

E in cima alla mia pagina JSF :

<?xml version='1.0' encoding='UTF-8' ?> 

Come posso risolvere lo stesso problema in JBoss AS 7? O meglio, in un modo più generico in modo che funzioni in tutti i server?

+0

E 'impossibile capire che cosa il vostro problema è. Modifica la tua domanda per essere chiari sul problema che hai dovuto affrontare. – skuntsel

+0

Il mio problema è lo stesso di questo collegamento [http://stackoverflow.com/questions/9682476/character-encoding-jsf-input]. Sto usando Jboss 7 AS invece di Glassfish. Voglio chiedere come risolvere il problema in Jboss. –

risposta

10

La domanda a cui è stato collegato ha già escluso la codifica del DB dalla causa perché il problema si verifica già durante la stampa/visualizzazione del valore inviato prima di salvare in DB. Pertanto, il problema è nella codifica delle richieste HTTP.

L'URL di connessione JDBC con il set di caratteri specificato,

jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8 

dice solo il driver MySQL JDBC da utilizzare UTF-8 per decodificare i valori in query SQL prima di inviarlo al DB. Questo non è solo completamente al di fuori dell'ambito di JSF, ma anche questo non è la causa del tuo problema, a condizione che tu sia assolutamente sicuro di avere lo stesso problema della domanda collegata.

tuo prologo XML con il set di caratteri specificato,

<?xml version='1.0' encoding='UTF-8' ?> 

dice solo il parser XML di utilizzare UTF-8 per decodificare la sorgente XML prima di costruire la struttura XML intorno ad esso. Il parser XML attualmente utilizzato è SAX come internamente utilizzato da Facelets durante la creazione della vista JSF. Questa parte non ha assolutamente nulla a che fare con la codifica richiesta/risposta HTTP ed è quindi molto improbabile la causa del tuo problema.

Nessuno di questi imposta la codifica della richiesta HTTP, mentre è necessario impostare la codifica della richiesta HTTP. La domanda a cui ti sei collegato mostra già come farlo per il server Glassfish. Nel tuo caso, stai comunque utilizzando il server JBoss AS. L'impostazione specifica Glassfish è quindi inapplicabile e JBoss non supporta nulla del genere. Avresti bisogno di portare un filtro servlet personalizzato per fare il lavoro. Per esempio.

@WebFilter("/*") 
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); 
    } 

    // ... 
} 
+1

Quando sto cercando di utilizzare: jdbc: mysql: // localhost: 3306/mydb? UseUnicode = yes & characterEncoding = UTF-8 nel mio application-context.xml, mi dà un errore Il riferimento all'entità "characterEncoding" deve terminare con il ';' delimitatore, puoi aiutarmi con il problema – Nitin

+4

Incredibile. Eccoci nel 2014, utilizzando l'ultimo sistema operativo, JEE, app server, database - tutti UTF-8. E ancora abbiamo bisogno di qualche soluzione per avere caratteri speciali gestiti correttamente. Grazie per questa soluzione! –

1

L'aggiunta di questo al JBOSS_HOME/standalone/configuration/standalone.xml risolto per me:

<system-properties> 
    <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/> 
    <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/> 
</system-properties> 

preso da https://developer.jboss.org/message/643825#643825