JSF кирилица
16 отговора
0 прегледа
JSF кирилица
Здравейте колеги,
Не съм сигурен че тук е правилното място на този въпрос, като гледам JSF не е много популярен в БГ.
Имам следният въпрос. До сега все съм писал някви проекти дето са на английски и никога не съм кирилизирал JSF приложение. Опитвам се да кирилизирам едно и резултата е катастрофален.
JSP страницата ми изглежда така:
<%@page language="java" pageEncoding="WINDOWS-1251" contentType="text/html; charset=CP1251" %>
<%@ taglib uri="[линк]" prefix="h" %>
<%@ taglib uri="[линк]" prefix="f" %>
<f:loadBundle basename="resources.application" var="bundle"/>
<f:view>
<html>
<head>
<title>
<h:outputText value="#{bundle['welcome.title']}" /></title>
</head>
<body>
<h:outputText value="#{bundle['welcome.heading']}" />
<h:outputText value="#{bundle['welcome.message']}" />
</body>
</html>
</f:view>
Както виждате от хедъра енкодинга е сетнат на 1251. В ресурс бъндела също съм го сетнал да се сейва на 1251 от еклипс-а. Когато стартирам в браузера приложението, ми показва един голям и дебел среден пръст, под форманата на маймуни. Бахти!!!! Айде някой ако се е занимавал с кирилизация да помогне.
ПС: Ползвам Jboss 4.0.5 възможно ли е той да скапва нещата? Май той ми е основният заподозрян!
Не съм сигурен че тук е правилното място на този въпрос, като гледам JSF не е много популярен в БГ.
Имам следният въпрос. До сега все съм писал някви проекти дето са на английски и никога не съм кирилизирал JSF приложение. Опитвам се да кирилизирам едно и резултата е катастрофален.
JSP страницата ми изглежда така:
<%@page language="java" pageEncoding="WINDOWS-1251" contentType="text/html; charset=CP1251" %>
<%@ taglib uri="[линк]" prefix="h" %>
<%@ taglib uri="[линк]" prefix="f" %>
<f:loadBundle basename="resources.application" var="bundle"/>
<f:view>
<html>
<head>
<title>
<h:outputText value="#{bundle['welcome.title']}" /></title>
</head>
<body>
<h:outputText value="#{bundle['welcome.heading']}" />
<h:outputText value="#{bundle['welcome.message']}" />
</body>
</html>
</f:view>
Както виждате от хедъра енкодинга е сетнат на 1251. В ресурс бъндела също съм го сетнал да се сейва на 1251 от еклипс-а. Когато стартирам в браузера приложението, ми показва един голям и дебел среден пръст, под форманата на маймуни. Бахти!!!! Айде някой ако се е занимавал с кирилизация да помогне.
ПС: Ползвам Jboss 4.0.5 възможно ли е той да скапва нещата? Май той ми е основният заподозрян!
Re: JSF кирилица
напражи си енkодинг филтер и го регистрирай в web.xml там сетваш енкодинга в хедъра на http-то. по-добре ползвай обаче utf-8 понеже е стандарт и няма да имаш проблем с различните OS
Re: JSF кирилица
Не мисля че encoding filter-a е предвиден да се ползва съвместно със Java server faces. Убеден ли си че именно това е начина, можеш ли да ме препратиш към някакви интернет ресурси или да ми дадеш по дълго обяснение от 1 ред?
Re: JSF кирилица
Java Server Faces най грубо казано представлява един Servlet, който се явява контролер. Не виждам какъв е проблема да се реши с Filter.
The human knowledge belongs to the world.
The human knowledge belongs to the world.
Re: JSF кирилица
Ами стандартните java.util.Properties четат само Latin-1 кодиране, така че твоето windows-1251 просто не се чете правилно. В този случай се прави друго. Използваш native2ascii - една програма от JDK-то, за да конвертираш файла в Latin-1. Той съответна заменя кирилските символи с escape последователност и всичко си тръгва. Ако ползваш ANT - в него има същият таск.
Re: JSF кирилица
/*
* UTF8EncodingFilter.java
*/
package com.itt.ecs.web.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* This class is used for UTF-8 encoding
*
* @author Adrian Mitev
*/
public class UTF8EncodingFilter implements Filter {
/**
* @param config
* @throws javax.servlet.ServletException
*/
public void init(FilterConfig config) throws ServletException {
}
/**
* Sets the request and response character encoding to UTF-8
*
* @param request
* @param response
* @param chain
* @throws java.io.IOException
* @throws javax.servlet.ServletException
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
public void destroy() {
}
}
кода на филтъра
* UTF8EncodingFilter.java
*/
package com.itt.ecs.web.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* This class is used for UTF-8 encoding
*
* @author Adrian Mitev
*/
public class UTF8EncodingFilter implements Filter {
/**
* @param config
* @throws javax.servlet.ServletException
*/
public void init(FilterConfig config) throws ServletException {
}
/**
* Sets the request and response character encoding to UTF-8
*
* @param request
* @param response
* @param chain
* @throws java.io.IOException
* @throws javax.servlet.ServletException
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
public void destroy() {
}
}
кода на филтъра
Re: JSF кирилица
Ако искаш да запазиш сегашната си схема, трябва да направиш точно две неща, които следват. Ако не, виж след тях.
1. Ако твоите bundles са написани в .properties файлове, тогава си ги прекодирай с native2ascii програмката -- тя е част от JDK-то. Отделен въпрос е, че някои IDE-та го правят вместо теб, когато стартираш или дебъгваш уеб-проекта си.
2. Името на кодировката ти е грешно -- в UNIX/Linux може и да е "cp1251", но в HTML/XML е "windows-1251".
Съвсем друг въпрос е, че го правиш по глупавия начин. В JSF не се дава така кодировката, прави се чрез XML пролога, ето така:
<?xml version="1.0" encoding="windows-1251" ?>
Както се прави във всеки XML файл. Никакви мистични директиви на съответния framework.
И накрая, зарежи 8-битовите фиксирани кодировки, ползвай UTF-8. Ако не знаеш, той е разширеине на US-ASCII, направено така, че US-ASCII символите (демек латиницата) да са в абсолютно същия формат, в какъвто са били преди, а останалите езикови символи са няколко-байтови с променлива дължина, т.е. с една кодировка поддържаш ВСИЧКИ езици. Всички нови браузъри поддържат UTF-8 кодировката, вкл. и Internet Explorer 5.5, а той хич не е нов, отдавна при това.
Поздрави.
1. Ако твоите bundles са написани в .properties файлове, тогава си ги прекодирай с native2ascii програмката -- тя е част от JDK-то. Отделен въпрос е, че някои IDE-та го правят вместо теб, когато стартираш или дебъгваш уеб-проекта си.
2. Името на кодировката ти е грешно -- в UNIX/Linux може и да е "cp1251", но в HTML/XML е "windows-1251".
Съвсем друг въпрос е, че го правиш по глупавия начин. В JSF не се дава така кодировката, прави се чрез XML пролога, ето така:
<?xml version="1.0" encoding="windows-1251" ?>
Както се прави във всеки XML файл. Никакви мистични директиви на съответния framework.
И накрая, зарежи 8-битовите фиксирани кодировки, ползвай UTF-8. Ако не знаеш, той е разширеине на US-ASCII, направено така, че US-ASCII символите (демек латиницата) да са в абсолютно същия формат, в какъвто са били преди, а останалите езикови символи са няколко-байтови с променлива дължина, т.е. с една кодировка поддържаш ВСИЧКИ езици. Всички нови браузъри поддържат UTF-8 кодировката, вкл. и Internet Explorer 5.5, а той хич не е нов, отдавна при това.
Поздрави.
Re: JSF кирилица
Защото е безсмислено затова. Има много по елементарен, ефикасен и бърз начин. Да решиш проблемът със филтър е все едно да ползваш пещ за топене на стомана за да си сготвиш чипс.
Re: JSF кирилица
Мерси за отговора макар че го чета със месец закъснение. Това е правилното решение на проблемът ми. Казвам го само за протокола.
Поздрави и благодаря.
Поздрави и благодаря.
Re: JSF кирилица
Значи е по добре да пипаш и да добавяш на една камара страници едно и същот отколото да напишеш един обикновен клас?
ПП: Стоманата не виждам защо трябва да се топи в пещи. Обикновенно пещите се използват за закаляване, нормализация или отвръщане на стоманата. А това с топенето се нарича леене, и тъй като стоманата има прекалено ниско съдържание на въглерод няма как да се лее, затова чугуна се лее, защото има по високо съдържание на въглерод и се намира над евтектоидната крива в желязо - циментитната диаграма.
The human knowledge belongs to the world.
ПП: Стоманата не виждам защо трябва да се топи в пещи. Обикновенно пещите се използват за закаляване, нормализация или отвръщане на стоманата. А това с топенето се нарича леене, и тъй като стоманата има прекалено ниско съдържание на въглерод няма как да се лее, затова чугуна се лее, защото има по високо съдържание на въглерод и се намира над евтектоидната крива в желязо - циментитната диаграма.
The human knowledge belongs to the world.
Re: JSF кирилица
Погледни малко по надолу и ще видиш решението. В никакви класове не се бърка, просто се пуска един конвертор и си готов.
Re: JSF кирилица
А request'a от през кой convertor го минаваш ?
The human knowledge belongs to the world.
The human knowledge belongs to the world.
Re: JSF кирилица
Няма конвертор. Достатъчно е да добавиш необходимите хедъри на съответната jspx страница.
Re: JSF кирилица
А ако страницата не е jspx ?
The human knowledge belongs to the world.
The human knowledge belongs to the world.
Re: JSF кирилица
:))))) за това не мога да ти кажа. Обаче аз за нищо на света не пиша чисти jsp-та . Не ми се занимава със архаизми. Даже недоумявам как още хората продължават да се занимаат със тях.
Да не говорим пък за хроничната мигрена която получавам от тях.
Да не говорим пък за хроничната мигрена която получавам от тях.
Редактирано от bion на
Re: JSF кирилица
Кой ти говори за чисти jsp'та? View'тата не само в jspx се пишат.
The human knowledge belongs to the world.
The human knowledge belongs to the world.
Re: JSF кирилица
Виж аз под jsp страница разбирам страница която не е well formed бетер jspx може да имаш JSF страница и отново да е jsp. За да внеса яснота ще кажа че ползвам само JSP2.0 и JSP2.1 стандарта. Бих ползвал и 1.х но тогава разни индивидчета започват да пишат като бесни скриплети и джава скрипт където сварят и качеството на кода пада под нулата. Освен това при JSP2.х има Unified Expression Language и JSTL таговете почти всичките работят. Докато ако ползваш JSP 1.х по голямата част от JSTL таговете се дънят яко.
Всичко което казвам го казвам от гледна точка на JSF
Всичко което казвам го казвам от гледна точка на JSF
Редактирано от bion на