Einstellen der ISO-8859-1-Codierung für eine einzelne Tapestry 4 Seite in der Anwendung, die ansonsten völlig UTF-8

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

Frage

Ich habe eine Tapisserie-Anwendung, die seine Seite als UTF-8 dient. Das heißt, Server-Antworten haben Header:

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

Nun innerhalb dieser Anwendung gibt es eine einzige Seite, die mit ISO-8859-1-Codierung bedient werden soll. Das heißt, Server-Antwort sollte diesen Header haben:

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

Wie dies zu tun? Ich möchte nicht, Standard-Codierung für die gesamte Anwendung ändern.

Basierend auf Google-Suche habe ich versucht, folgende:

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

Aber weder diese Werte mit @Meta Anmerkung oder überwiegender getOutputEncoding Methode Einstellung funktioniert.

Ich bin mit Tapestry 4.0.2.

EDIT: Ich endete mit Unterklasse HttpServletResposeWrapper tun dies mit einem Servlet-Filter auf. Der Wrapper Überschreibungen setContentType (), um Kraft, die erforderlich Codierung für die Antwort.

War es hilfreich?

Lösung

Haben Sie einen Filter in Betracht gezogen? Vielleicht nicht ganz so elegant wie etwas in Teppich, sondern ein einfaches Filter mit, dass das URL-Mapping (e) von Interesse registriert. Einer seiner init Parameter würde die Kodierung der nach sein. Beispiel:

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

}

Andere Tipps

Sie getan haben könnte:

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

Der Filter Vorschlag ist gut. Sie können auch Servlets mit Tapestry mischen. Zum Beispiel haben wir Servlets für die Bedienung Anzeige von XML-Dokumenten und dynamisch generierte Excel-Dateien. So stellen Sie sicher, dass die Zuordnungen richtig in web.xml so eingestellt, dass, dass die Servlets gehen nicht durch Tapestry.

Tapestry hat das Konzept von Filtern, die auf die Anforderung / Antwort-Pipeline angewendet werden kann, aber mit dem Vorteil, dass Sie die T5 IoC Container & Services zugreifen können.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top