[Resolvido] - JSF Problemas com acentuação

22 respostas
L
Olá Eu estava fazendo uma aplicação jsf e atualizei o netBeans pra versão 7.0 e tive um problema com os formulários de cadastro quando são preenchidos com acentos. Eu estou usando jsf2.0 e o glassfish3.1 O servidor lança essa mensagem de aviso:
WARNING: PWC4011: Unable to set request character encoding to UTF-8 from context /fastfoodapp, because request parameters have already been read, or ServletRequest.getReader() has already been called
E os caracteres que usavam acentos ficam desconfigurados. exemplo.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
            <h:inputText  />
            <h:commandButton />
        </h:form>
    </h:body>
</html>
Quando eu digito João e submeto o formulário o resultado é esse [img]http://i274.photobucket.com/albums/jj276/llucasbr/Semttulo-2.jpg[/img]

22 Respostas

J

Experimente trocar a linha

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

por

<?xml version='1.0' encoding='ISO-8859-1' ?>
L

Cara obrigado pela resposta
Mas eu fiz isso ai que você falou e resolveu o problema dos inputText, mas os outputText ficaram com problema.
Mas eu queria saber também por que antes funcionava tudo normal usando UTF-8 e agora ta tudo com problema =/

L
Consegui resolver depois de muito tempo o problema que eu nem sei de onde veio ja que tudo funcionava normal e deu pane do nada -.-' Além do encoding declarado no xml como ISO-8859-1 coloquei a tag f:view com contentType="text/html; charset=ISO-8859-1" Enfim o código no final ficou assim
<?xml version='1.0' encoding='ISO-8859-1' ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">

    <f:view contentType="text/html; charset=ISO-8859-1">
        <h:head>
            <title>Facelet Title</title>
        </h:head>

        <h:body>
            <h:form>
                <h:outputText value="João" />
                <h:inputText />
            </h:form>
        </h:body>
    </f:view>
</html>
E

Pra mim funcionou com a definição da valor para o atributo acceptcharset do form. Assim:

<h:form id="form" acceptcharset="ISO-8859-1">
P

Valeu por compartilhar Evandro Canal, me ajudou aqui também. :smiley:

Obrigado

R
llucas:
Consegui resolver depois de muito tempo o problema que eu nem sei de onde veio ja que tudo funcionava normal e deu pane do nada -.-' Além do encoding declarado no xml como ISO-8859-1 coloquei a tag f:view com contentType="text/html; charset=ISO-8859-1" Enfim o código no final ficou assim
<?xml version='1.0' encoding='ISO-8859-1' ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">

    <f:view contentType="text/html; charset=ISO-8859-1">
        <h:head>
            <title>Facelet Title</title>
        </h:head>

        <h:body>
            <h:form>
                <h:outputText value="João" />
                <h:inputText />
            </h:form>
        </h:body>
    </f:view>
</html>

Bah llucas. Matou a pau. To há uns quatro dias tentando resolver este problema. Muito obrigado cara.

N

Estou com o mesmo problema de acentuação com JSF, porém, as soluções dadas não resolveram o meu problema. Estou utilizando o primefaces.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:p="http://primefaces.prime.com.tr/ui">
<head> 
    		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    		<meta http-equiv="X-UA-Compatible" content="IE=Edge" />

/* Restante do código */
R

novato25. Coloque a parte do Prime pra gente dar uma olhada. Tu tem no teu código a tag <f:view contentType=“text/html; charset=ISO-8859-1”>?

N
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.prime.com.tr/ui"
    xmlns:f="http://java.sun.com/jsf/core">

<f:view contentType="text/html; charset=ISO-8859-1">
    <h:head>
    	<f:facet name="first">
    		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
    		<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>    
    	</f:facet>
R

Troca <?xml version="1.0" encoding="UTF-8"?> por <?xml version='1.0' encoding='ISO-8859-1' ?>

se não resolver avisa aí. Abraço.

N

olá regisnv,

obrigado pela ajuda… não resolveu… parece que nada resolve… já estou há dois dias com este problema e nada.

N

Um detalhe… funciona no Firefox, mas no IE e no Chrome não. :?

R

Ah desculpa… vi só agora teu novo post. Estranho não funcionar em todos os proxys. Eu tiraria aquele <f:facet>, não? O que tu acha? Abraço.

R

Na verdade tiraria toda essa parte:

<f:facet name="first"> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/> <meta http-equiv="X-UA-Compatible" content="IE=Edge"/> </f:facet>

N

olá regisnv,

vi uma coisa estranha aqui na página. Como ela é composta, na metade dela encontrei outra tag html… sistema legado é complicado. Vou ver se é isto que causa o problema e ver se soluciono ele. Valeu… :slight_smile:

N

olá regisnv,

resolvi o problema. Era o ajax. Coloquei o commandButton com o atributo ajax=false e funcionou… valeu!

R

Nossa, vivendo e aprendendo. Nunca imaginaria isso. Que bom que tu conseguiu cara. Abraço.

N

É… eu também não… mas por incrível que possa parecer, resolveu… já tinha tentado N maneiras de configuração de codificação e nada. Valeu!!

S

Pessoal, estou com o mesmo problema e todas as soluções não funcionaram. Estou usando Facelets

<?xml version='1.0' encoding='ISO-8859-1' ?>

<ui:composition xmlns=“http://www.w3.org/1999/xhtml
xmlns:ui=“http://xmlns.jcp.org/jsf/facelets
template="./Template.xhtml"
xmlns:h=“http://xmlns.jcp.org/jsf/html
xmlns:p=“http://primefaces.org/ui
xmlns:f=“http://xmlns.jcp.org/jsf/core”>

<ui:define name="content">

]
Estou usando primefaces
o estranho que na barra de menu tem acento e está normal.
Obrigado desde já

A

Vlw Evandro, só a inclusão na tag FORM já resolveu o meu problema.
Muito obrigado.

A

Se vc usar o padrao de openSessionInView faça isso

public class FilterOpenSessionInView extends DelegatingFilterProxy implements Serializable {

    private static final long serialVersionUID = 1L;
    private static SessionFactory sf;

    @Override
    public void initFilterBean() throws ServletException {
        sf = HibernateUtil.getSessionFactory();
    }

    @Override
    public void doFilter(ServletRequest servletRequest,
            ServletResponse servletResponse, FilterChain chain)
            throws IOException, ServletException {
        try {

            servletRequest.setCharacterEncoding("ISO-8859-1"); //codificacao

            sf.getCurrentSession().beginTransaction();
            chain.doFilter(servletRequest, servletResponse);
            sf.getCurrentSession().getTransaction().commit();

            servletResponse.setCharacterEncoding("ISO-8859-1");   //codificacao
            servletResponse.setContentType("text/html; charset=ISO-8859-1");  //codificacao

        } catch (Exception e) {

            e.printStackTrace();

            if (sf.getCurrentSession().getTransaction().isActive()) {
                sf.getCurrentSession().getTransaction().rollback();
            }

        } finally {
            if (sf.getCurrentSession().isOpen()) {
                if (sf.getCurrentSession().beginTransaction().isActive()) {
                    sf.getCurrentSession().clear();
                }
                sf.getCurrentSession().close();
            }
        }
    }
}
G

Cara, pega o primeiro artefato de código que recebe a sua request (seja um filtro, um listiner, um servlet, não importa, desde que seja o primeiro a receber a request) e seta an request e na response o charset. Vai funcionar independente de navegador, servidor, S.O.

//tirar os caracteres estranhos das requisições e respostas

request.setCharacterEncoding(UTF-8);

response.setCharacterEncoding(UTF-8);

obs: veja se o banco está setado em UTF-8.

Criado 28 de abril de 2011
Ultima resposta 6 de dez. de 2014
Respostas 22
Participantes 10