Definindo-ISO 8859-1 que codifica para uma única página tapeçaria 4 na aplicação que é de outra forma totalmente UTF-8

StackOverflow https://stackoverflow.com/questions/153482

Pergunta

Eu tenho um aplicativo de tapeçaria que está servindo a sua página como UTF-8. Ou seja, as respostas do servidor tem cabeçalho:

Content-type: text/html;charset=UTF-8

Agora, dentro desta aplicação há uma única página que deve ser servido com ISO-8859-1. Ou seja, a resposta do servidor deve ter este cabeçalho:

Content-type: text/html;charset=ISO-8859-1

Como fazer isso? Eu não quero para o padrão de mudança de codificação para aplicação inteira.

Com base no Google busca Tentei seguinte:

 @Meta({    "org.apache.tapestry.output-encoding=ISO-8859-1", 
    "org.apache.tapestry.response-encoding=ISO-8859-1", 
    "org.apache.tapestry.template-encoding=ISO-8859-1",
    "tapestry.response-encoding=ISO-8859-1"})
 abstract class MyPage extends BasePage {

    @Override
    protected String getOutputEncoding() {
        return "ISO-8859-1";
    }
 }

Mas nem definir esses valores com @Meta anotação ou substituindo getOutputEncoding método funciona.

Eu estou usando Tapestry 4.0.2.

EDIT: Acabei fazendo isso com um filtro de Servlet com subclasse HttpServletResposeWrapper. setContentType O invólucro substituições () a força requerida que codifica para a resposta.

Foi útil?

Solução

Você considerou um filtro? Talvez não tão elegante como algo dentro de tapeçaria, mas usando um filtro simples, que registra o mapeamento url (s) de interesse. Um dos seus parâmetros de inicialização seria a codificação de sua depois. Exemplo:

public class EncodingFilter implements Filter {
private String encoding;
private FilterConfig filterConfig;

/**
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig fc) throws ServletException {
this.filterConfig = fc;
this.encoding = filterConfig.getInitParameter("encoding");
}

/**
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
req.setCharacterEncoding(encoding);
chain.doFilter(req, resp);
}

/**
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {
}

}

Outras dicas

Você poderia ter feito:

    @Override
public ContentType getResponseContentType() {
        return new ContentType("text/html;charset=" + someCharEncoding);
}

A sugestão filtro é bom. Você também pode misturar servlets com tapeçaria. Por exemplo, temos servlets para servir exibindo documentos XML e arquivos do Excel geradas dinamicamente. Apenas certifique-se de que definir corretamente os mapeamentos no web.xml para que que os servlets não passam por Tapestry.

Tapestry tem o conceito de filtros que podem ser aplicados para o pipeline de solicitação / resposta, mas com a vantagem de que você pode acessar a T5 IoC Container & Serviços.

http://tapestry.apache.org/tapestry5/tapestry -core / guia / request.html

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