2013-07-13 9 views
5

Mam ten sam problem co Set request character encoding of JSF input submitted values to UTF-8 in GlassFish, przesłane wartości są dostarczane jako Mojibake. Jednak odpowiedź jest skierowany do GlassFish i używam JBoss AS 7.Ustawienie kodowania znaków żądania wartości przesłanych przez wejście JSF do UTF-8

Już określony adres URL połączenia JDBC używać UTF-8

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

aw szczycie mojej stronie JSF :

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

Jak mogę rozwiązać ten sam problem w JBoss AS 7? Lub lepiej, w bardziej ogólny sposób, aby działał na wszystkich serwerach?

+0

Niemożliwe jest, aby zrozumieć, jaki jest twój problem. Zmień swoje pytanie, aby było jasne w kwestii, z którą się spotkałeś. – skuntsel

+0

Mój problem jest taki sam jak ten link [http://stackoverflow.com/questions/9682476/character-encoding-jsf-input]. Używam Jboss 7 AS zamiast Glassfish. Chcę zapytać, jak rozwiązać problem w Jboss. –

Odpowiedz

10

Pytanie, z którym się łączyłeś, już wykluczyło kodowanie DB z przyczyny, ponieważ problem już występuje podczas drukowania/ponownego wyświetlania przesłanej wartości przed zapisaniem w DB. Tak więc problem polega na kodowaniu żądań HTTP.

Twoje połączenie JDBC URL z określonym charset,

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

tylko mówi sterownik MySQL JDBC do korzystania z UTF-8 do dekodowania wartości w zapytaniach SQL przed wysłaniem go do DB. Jest to nie tylko całkowicie poza zasięgiem JSF, ale nie jest to również przyczyną Twojego problemu, pod warunkiem, że masz absolutną pewność, że masz taki sam problem jak w połączonym pytaniu.

Twój prolog XML z określonego zestawu znaków,

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

tylko mówi parsera XML UTF-8 do dekodowania źródło XML przed budowanie drzewa XML wokół niego. Analizator składni XML faktycznie używany jest SAX jako wewnętrznie używany przez Facelets podczas budowania czasu widoku JSF. Ta część nie ma nic wspólnego z kodowaniem żądań/odpowiedzi HTTP i dlatego jest bardzo mało prawdopodobna przyczyną problemu.

Żadne z nich nie ustawia kodowania żądań HTTP, podczas gdy trzeba ustawić kodowanie żądań HTTP. Pytanie, które łączyłeś już pokazuje, jak to zrobić dla serwera Glassfish. W twoim przypadku korzystasz jednak z serwera JBoss AS. Ustawienie specyficzne dla Glassfish nie ma zastosowania, a JBoss nie obsługuje niczego podobnego. Aby wykonać zadanie, musisz wprowadzić niestandardowy filtr serwletów. Na przykład.

@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

Kiedy próbuję użyć: jdbc: mysql: // localhost: 3306/mydb? UseUnicode = yes & characterEncoding = UTF-8 w moim application-context.xml, daje mi błąd Odwołanie się do encji "characterEncoding" musi kończyć się na ";" delimiter, czy możesz mi pomóc przy emisji – Nitin

+4

Incredible. Tutaj jesteśmy w 2014 roku, używając najnowszego systemu operacyjnego, JEE, serwera aplikacji, bazy danych - wszystkich UTF-8. Nadal potrzebujemy obejścia, aby poprawnie obsługiwać znaki specjalne. Dzięki za to rozwiązanie! –

1

dodanie tego do JBOSS_HOME/standalone/configuration/standalone.xml rozwiązać go dla mnie:

<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> 

dostał go od https://developer.jboss.org/message/643825#643825

Powiązane problemy