4

我有一个 Tapestry 应用程序将其页面作为 UTF-8 提供服务。也就是说,服务器响应具有标题:

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

现在在这个应用程序中有一个页面应该使用 ISO-8859-1 编码。也就是说,服务器响应应该有这个头:

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

这该怎么做?我不想更改整个应用程序的默认编码。

基于谷歌搜索,我尝试了以下操作:

 @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";
    }
 }

但是使用 @Meta 注释设置这些值或覆盖 getOutputEncoding 方法都不起作用。

我正在使用 Tapestry 4.0.2。

编辑:我最终使用带有子类 HttpServletResposeWrapper 的 Servlet 过滤器来执行此操作。包装器覆盖 setContentType() 以强制响应所需的编码。

4

4 回答 4

3

你考虑过过滤器吗?也许不像 Tapestry 中的那样优雅,但使用一个普通的过滤器,注册感兴趣的 url 映射。它的 init 参数之一将是您之后的编码。例子:

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() {
}

}
于 2008-10-02T02:59:56.860 回答
2

你可以这样做:

    @Override
public ContentType getResponseContentType() {
        return new ContentType("text/html;charset=" + someCharEncoding);
}
于 2010-10-27T21:53:28.703 回答
1

过滤器建议很好。您还可以将 servlet 与 Tapestry 混合使用。例如,我们有用于显示 XML 文档和动态生成的 Excel 文件的 servlet。只需确保在 web.xml 中正确设置映射,这样 servlet 就不会通过 Tapestry。

于 2008-10-02T15:11:27.133 回答
1

Tapestry 具有可应用于请求/响应管道的过滤器概念,但其优势在于您可以访问 T5 IoC 容器和服务。

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

于 2009-01-31T13:22:41.240 回答