Arquivo

Posts Tagged ‘FileUploadEvent’

Resolvendo problema com ACENTUAÇÃO no nome do ARQUIVO com FILEUPLOAD do PRIMEFACES

Nesta última semana tive uns probleminhas com o FileUpload ao pegar o nome do arquivo que estava realizando um upload, os nome dos arquivos que possuiam acentuação sempre vinham com estes caracteres trocados por caracteres especiais. O cliente não ficou satisfeito, pois se eu fizesse o upload de uma arquivo DECLARAÇÃO_IMPOSTO_RENDA_20011.PDF vinha algo assim DECLARA≤Â÷ÆO_IMPOSTO_RENDA_2011.PDF.

Após várias tentativas consegui uma resolução para o problema de forma fácil e elegante. Para resolver, basta criarmos um filtro para setar o tipo de codificação do texto contido na resposta e na requisição.

Vamos por a mão na massa! Crie um pacore filters no seu projeto e dentro dele crie uma classe CharacterEncodingFilter.java. Abaixo o exemplo do código desta classe:

public class CharacterEncodingFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        chain.doFilter(req, resp);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void destroy() {
    }
}

Bem simple, apenas setamos a codificação na resposta e na requisição. Além disso precisamos declarar este filtro no web.xml:

    <filter>
        <filter-name>Character Encoding Filter</filter-name>
        <filter-class>br.com.tecnodocs.vdocs.filters.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Character Encoding Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>

Com isso você conseguirá pegar os nomes dos arquivos através do p:fileUpload em qualquer SO sem problemas de acentuação.

Espero que a dica ajude outros da mesma forma que me ajudou, abraço!

Benigno M. Sales

“Ame seus inimigos, faça o bem para aqueles que te odeiam, abençoe aqueles que te amaldiçoam, reze por aqueles que te maltratam. Se alguém te bater no rosto, ofereça a outra face. “
( Jesus Cristo )