4

ページを UTF-8 として提供する Tapestry アプリケーションがあります。つまり、サーバーの応答には次のヘッダーがあります。

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

このアプリケーション内には、ISO-8859-1 エンコーディングで提供する必要がある単一のページがあります。つまり、サーバーの応答には次のヘッダーが必要です。

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

これを行う方法?アプリケーション全体のデフォルトのエンコーディングを変更したくありません。

Google検索に基づいて、次のことを試しました:

 @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 を持つサーブレットフィルターでこれを行うことになりました。ラッパーは setContentType() をオーバーライドして、応答に必要なエンコードを強制します。

4

4 に答える 4

3

フィルターを検討しましたか? Tapestry 内のものほどエレガントではないかもしれませんが、関心のある URL マッピングを登録する単純なフィルターを使用します。その初期化パラメーターの 1 つは、後でエンコードすることです。例:

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

The filter suggestion is good. You can also mix servlets with Tapestry. For instance, we have servlets for serving displaying XML documents and dynamically generated Excel files. Just make sure that correctly set the mappings in web.xml so that that the servlets do not go through Tapestry.

于 2008-10-02T15:11:27.133 に答える