2012-06-24 12 views
6

Mam bardzo prostą aplikację, jest tam inputtext na mojej stronie indeksu i przycisk, aby przejść do page2.xhtml.UTF-8 w PrimeFaces 3.x

<h:body> 
     <h:form> 
      <h:inputText value="#{mainBean.testValue}"/> 
      <p:commandButton update="myoutput" value="ajax call" ajax="false"/> 
      <p:separator /> 
      <h:commandButton action="#{mainBean.gotoPageTwo}" value="goto Page2"/> 
      <br/> 
      <h:outputText value="#{mainBean.testValue}" id="myoutput"/> 
     </h:form> 
    </h:body> 
</html> 

Przetestowałem tę aplikację z PrimeFaces 2.2.1 i nie było problemu. , ale po przesłaniu każdego z powyższych przycisków moje znaki UTF-8 zostaną zniszczone. Przetestowałem filter, ale to nie działa. Czy to błąd w PrimeFaces 3.x? Czy ciało może rozwiązać ten problem?

+0

Czy próbowali zlokalizować, gdzie jest problem? Czy appserver wysyła do witryny kodowanie UTF-8, ale nagłówki odpowiedzi mówią, że to (na przykład) Latin1? A może appserver/framework przekształca twoje znaki na Latin1 przed wysłaniem ich do przeglądarki? – millimoose

+0

Sprawdziłem Content-Type z fireboxem i było to: text/html; charset = UTF-8. Zauważ, że nie ma problemu z podstawami 2.2.1 – zorro6064

Odpowiedz

5

Przykład odpowiedzi znalezionej na forum PrimeFaces jest niekompletny. Brakuje <filter-mapping>. Bez tego filtr w ogóle nie będzie działał. Dodaj go odpowiednio

<filter-mapping> 
    <filter-name>Character Encoding Filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Kiedy jesteś już na Servlet 3.0 (Tomcat 7, GlassFish 3 itp), alternatywą jest użycie tylko @WebFilter adnotacji na klasy. Nie zapomnij usunąć wpisu filtra z web.xml.

@WebFilter("/*") 

Dla wyjaśnienia tła przyczyny tego problemu kodowania znaków podczas aktualizacji PrimeFaces 2.x, 3.x, patrz również Unicode input retrieved via PrimeFaces input components become corrupted

+0

Masz rację, ale moja odpowiedź nie została w pełni ukończona. Mam tendencję do edycji wiele razy (tak jak ty) :) – atamanroman

+0

Dzięki. Mój problem został rozwiązany. ale w innej aplikacji, na stronach, które są ładowane jako plik główny, pojawi się problem. W rzeczywistości mam dwa filtry w pliku web.xml, a gdy jest p: przesyłanie na stronie, filtrowanie znaków nie działa. Jak rozwiązać ten problem? – zorro6064

+1

Upewnij się, że filtr kodowania znaków jest zamapowany przed filtrem przesyłania pliku PrimeFaces w pliku 'web.xml'. – BalusC