Pergunta

Ok, eu gastei três sete horas pesquisando e testando no Google e desisto, tenho que pedir ajuda. Eu desenvolvia em Linux e tudo era fácil, agora uso windows e coisas tão fáceis como definir o local correto não funciona.

Criei JSP simples com formulário:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<form action="save-user" method="post">
    Name: <input type="text" name="name"><br>
    Email: <input type="text" name="email"><br>
    <input type="submit" value="Save">
</form>

E Servlets:

    String name = request.getParameter("name");
    String email = request.getParameter("email");

Recebo LeoÅ¡ em vez de Leoš.Eu uso WildFly 8.0RC1, Windows 8 tcheco, firefox.

O que eu já tentei:

  1. request.setCharacterEncoding("UTF-8");Antes de ler o primeiro parâmetro
  2. Filtrar com request.setCharacterEncoding("UTF-8");
  3. Propriedade JVM -Dfile.encoding=UTF-8
  4. Remova os frascos de pilha JEE padrão da guerra
  5. Consertar embalagens de guerra
  6. Dividir projeto em módulo WEB e EJB

Quando a entidade JPA/DAO é implantada, os diacríticos são mutilados.Se eu comentar a entidade do servlet e remover a entidade JPA da guerra (atualmente removendo OAuthLoginEJB.jar de WEB-INF/lib), receberei a codificação correta.Se eu adicionar este EJB novamente, ele falhará novamente.É um bug do JBoss/WildFly?

Posso fornecer fontes completas: https://drive.google.com/file/d/0B-adlc5KThQDWTdYOEwxOUpTVEU/edit?usp=sharingEstá pronto para ser executado, você nem precisa digitar letras em tcheco, pois elas são pré-preenchidas.Obrigado

Foi útil?

Solução

Marko, da lista de discussão de desenvolvedores do WildFly, me apontou esse defeito: https://issues.jboss.org/browse/CDI-411 e esta solução alternativa: http://weld.cdi-spec.org/documentation/#3

Quando modifiquei meu web.xml, ele começou a funcionar:

<filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>cz.literak.demo.oauth.servlets.EncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
        <filter-name>CDI Conversation Filter</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

Outras dicas

Você precisa ligar request.setCharacterEncoding("UTF-8") antes da primeira leitura da solicitação InputStream.Os parâmetros podem ser lidos pelo filtro antes de você definir a codificação em seu servlet.Pode ser que haja algum filtro OAuthLoginEJB.jar ou em outra dependência, qual lê os parâmetros primeiro?Normalmente, este é algum parâmetro para depuração ...Com a API Servlet 3.0, servlets e filtros podem ser registrados por anotações, portanto, alguns filtros podem ser registrados apesar de estarem vazios. web.xml.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top