Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

5. Redirecionando requisições .aula: Mostrar uma conta

Bom dia Pessoal,

Notei que minha página ListaDeContas .jsp , as informações que são exibidas na coluna "Descrição" não estão sendo "tratadas" pelo UTF-8. A acentuação não é reconhecida nessa coluna, porém no cabeçalho da tabela a acentuação aparece normalmente. Quando a informação vem do banco simulado, não vem com a formatação certa.

Como posso tratar isso?

obg.

7 respostas

Oi Francisco, encoding é muito chato... Na classe de configuração você pode tentar fazer algo assim:

 @Override
      protected Filter[] getServletFilters() {

        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        return new Filter[] { characterEncodingFilter};
      }

Olá Alberto,

obrigado pela resposta... mas qual classe de configuração você se refere?

Perdão, confundi com o curso mais novo de spring da plataforma. Registra o filtro no web.xml :).

Só pra ver se eu entendi... Tenho que colar esse bloco de código no web.xml?

Mas o web.xml irá reconhecer esse trecho de código???

solução!

Opa, não. Você pegar a classe do filtro e registrá-lo no web.xml

Eu não tava entendendo o que você queria dizer, então dei uma procurada no google, e achei a seguinte solução:

  • Criei uma classe chamada CharsetFilter, segue código abaixo:
import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharsetFilter implements Filter {

    private String encoding;

    public void init(FilterConfig config) throws ServletException {
        encoding = config.getInitParameter("requestEncoding");
        if (encoding == null) encoding = "UTF-8";
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain next)
            throws IOException, ServletException {
        // Respect the client-specified character encoding
        // (see HTTP specification section 3.4.1)
        if (null == request.getCharacterEncoding()) {
            request.setCharacterEncoding(encoding);
        }

        // Set the default response content type and encoding
        response.setContentType("text/html; charset=UTF-8");
        response.setCharacterEncoding("UTF-8");

        next.doFilter(request, response);
    }

    public void destroy() {
    }
}
  • Inseri no web.xml, o seguinte trecho de código:
<!--CharsetFilter start--> 

  <filter>
    <filter-name>CharsetFilter</filter-name>
    <filter-class>br.com.caelum.contas.CharsetFilter</filter-class>
      <init-param>
        <param-name>requestEncoding</param-name>
        <param-value>UTF-8</param-value>
      </init-param>
  </filter>

  <filter-mapping>
    <filter-name>CharsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

Com essas implementações no meu projeto, o meu arquivo.jsp está reconhecendo a acentuação correta.

Era isso que você recomendou fazer?

Em todo caso, muito obrigado pela ajuda!

vlw Alberto

Opa, basicamente :). Mas já tem um filtro pronto no Spring.

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>