Olá, boa tarde,
Estou tendo um problema com a exibição de dados em uma tabela, gerada através de h:dataTable.
Todos os caracteres especiais aparecem completamente quebrados, impedindo o funcionamento de certas partes da tela. Os dados que possuem problemas são buscados em um banco MySQL. As partes da tela em que o encoding funciona, vem de um arquivo de propriedades com codificação UTF-8. Se eu mudar o padrão do navegador de UTF-8 para ISO-8859-1, a tabela fica perfeita, porém o resto da tela fica com problemas. Já tentei de todas as maneiras codificar os dados vindos do banco para UTF-8 em Java. Antes dos dados serem exibidos na tela utilizei:
Charset charset = Charset.forName("UTF-8");
ByteBuffer bb = charset.encode(retVal);
return retVal;
try {
byte[] bytes = provider.getBytes("UTF-8");
retVal = new String(bytes, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Em debug, os valores aparecem corretos, mas no momento de exibir na tela não. Inspecionando no Firefox, percebi que os caracteres especiais estão sendo gerados na tela da seguinte maneira:
\uffffyph\uffffn\uffff\uffff' //Aqui deveria haver alguns caracteres especiais...
Todos os arquivos xhtml possuem <?xml version='1.0' encoding='UTF-8' ?>
E já testei utilizar também
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Qualquer luz será bem-vinda!
Valeu!
experimente 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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</h:head>
Cara, eu tive o mesmo problema, resolvi colocando o Encoding no meu WebFilter
package filtros;
import java.io.IOException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
@WebFilter(servletNames={"Faces Servlet"})
public class JPAFilter implements Filter{
private EntityManagerFactory factory;
@Override
public void destroy(){
this.factory.close();
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException{
EntityManager entityManager = this.factory.createEntityManager();
request.setCharacterEncoding("UTF-8");//
request.setAttribute("entityManager", entityManager);
response.setCharacterEncoding("UTF-8");
entityManager.getTransaction().begin();
chain.doFilter(request, response);
try{
entityManager.getTransaction().commit();
}catch(Exception e){
entityManager.getTransaction().rollback();
}finally {
entityManager.close();
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException{
this.factory = Persistence.createEntityManagerFactory("academia");
}
}