تعيين ترميز ISO-8859-1 لصفحة Tapestry 4 واحدة في التطبيق الذي يكون بخلاف ذلك UTF-8 بالكامل

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

سؤال

لدي تطبيق 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.

أنا أستخدم نسيج 4.0.2.

يحرر:انتهى بي الأمر بفعل ذلك باستخدام مرشح Servlet ذو الفئة الفرعية HttpServletResposeWrapper.يتجاوز المجمّع setContentType() لفرض التشفير المطلوب للاستجابة.

هل كانت مفيدة؟

المحلول

هل فكرت في التصفية؟ربما لا يكون أنيقًا مثل أي شيء داخل 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() {
}

}

نصائح أخرى

كان بإمكانك أن تفعل:

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

اقتراح التصفية جيد.يمكنك أيضًا مزج servlets مع Tapestry.على سبيل المثال، لدينا servlets لعرض مستندات XML وملفات Excel التي تم إنشاؤها ديناميكيًا.فقط تأكد من تعيين التعيينات بشكل صحيح في web.xml بحيث لا تمر servlets عبر Tapestry.

يحتوي Tapestry على مفهوم المرشحات التي يمكن تطبيقها على مسار الطلب/الاستجابة، ولكن مع ميزة أنه يمكنك الوصول إلى حاوية وخدمات T5 IoC.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top