2008-09-30 13 views
4

페이지를 UTF-8로 제공하는 Tapestry 응용 프로그램이 있습니다. 즉, 서버 응답은 헤더있다된다 완전히 UTF-8 인 응용 프로그램에서 단일 Tapestry 4 페이지에 대한 ISO-8859-1 인코딩 설정

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 주석 또는 오버라이드 (override) getOutputEncoding 방법은 작동과 그 값을 설정.

저는 Tapestry 4.0.2를 사용하고 있습니다.

EDIT : 서브 클래 싱 된 HttpServletResposeWrapper를 사용하여 Servlet 필터로이 작업을 끝내게되었습니다. 랩퍼는 setContentType()을 대체하여 응답에 필요한 인코딩을 강제 실행합니다.

답변

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

} 
+0

흠. * incoming * 요청에 대한 인코딩을 설정합니다. 나가는 응답에 대한 인코딩을 변경해야합니다. 내 Tapestry 응용 프로그램은 양식 제출을 처리하는 응용 프로그램이 아닙니다. 내 응용 프로그램은 양식 페이지 만 제공합니다. –

+0

응답 인코딩은 2.4 사양으로 설정할 수 있습니다. J2EE 1.4 서버에 있습니까? http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletResponse.html#setCharacterEncoding(java.lang.String) –

1

필터 제안이 좋습니다. 서블릿을 Tapestry와 혼합 할 수도 있습니다. 예를 들어 XML 문서를 표시하고 동적으로 생성 된 Excel 파일을 제공하는 서블릿이 있습니다. 서블릿이 Tapestry를 통과하지 못하도록 web.xml의 매핑을 올바르게 설정해야합니다.

2

은 당신이 할 수 있었다 :

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