JSF кирилица

16 отговора 0 прегледа
#1

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 възможно ли е той да скапва нещата? Май той ми е основният заподозрян!

Отговор
в отговор на bion #2

Re: JSF кирилица

напражи си енkодинг филтер и го регистрирай в web.xml там сетваш енкодинга в хедъра на http-то. по-добре ползвай обаче utf-8 понеже е стандарт и няма да имаш проблем с различните OS

Отговор
в отговор на the_brain #3

Re: JSF кирилица

Не мисля че encoding filter-a е предвиден да се ползва съвместно със Java server faces. Убеден ли си че именно това е начина, можеш ли да ме препратиш към някакви интернет ресурси или да ми дадеш по дълго обяснение от 1 ред?

Отговор
в отговор на bion #4

Re: JSF кирилица

Java Server Faces най грубо казано представлява един Servlet, който се явява контролер. Не виждам какъв е проблема да се реши с Filter.

The human knowledge belongs to the world.
Отговор
в отговор на bion #5

Re: JSF кирилица

Ами стандартните java.util.Properties четат само Latin-1 кодиране, така че твоето windows-1251 просто не се чете правилно. В този случай се прави друго. Използваш native2ascii - една програма от JDK-то, за да конвертираш файла в Latin-1. Той съответна заменя кирилските символи с escape последователност и всичко си тръгва. Ако ползваш ANT - в него има същият таск.

Отговор
в отговор на bion #6

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

}

}
кода на филтъра

Отговор
в отговор на bion #7

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, а той хич не е нов, отдавна при това.

Поздрави.

Отговор
в отговор на Matrix_N #8

Re: JSF кирилица

Защото е безсмислено затова. Има много по елементарен, ефикасен и бърз начин. Да решиш проблемът със филтър е все едно да ползваш пещ за топене на стомана за да си сготвиш чипс.

Отговор
в отговор на Aвтoмaтизaтop #9

Re: JSF кирилица

Мерси за отговора макар че го чета със месец закъснение. Това е правилното решение на проблемът ми. Казвам го само за протокола.
Поздрави и благодаря.

Отговор
в отговор на bion #10

Re: JSF кирилица

Значи е по добре да пипаш и да добавяш на една камара страници едно и същот отколото да напишеш един обикновен клас?

ПП: Стоманата не виждам защо трябва да се топи в пещи. Обикновенно пещите се използват за закаляване, нормализация или отвръщане на стоманата. А това с топенето се нарича леене, и тъй като стоманата има прекалено ниско съдържание на въглерод няма как да се лее, затова чугуна се лее, защото има по високо съдържание на въглерод и се намира над евтектоидната крива в желязо - циментитната диаграма.

The human knowledge belongs to the world.
Отговор
в отговор на Matrix_N #11

Re: JSF кирилица

Погледни малко по надолу и ще видиш решението. В никакви класове не се бърка, просто се пуска един конвертор и си готов.

Отговор
в отговор на bion #12

Re: JSF кирилица

А request'a от през кой convertor го минаваш ?

The human knowledge belongs to the world.
Отговор
в отговор на Matrix_N #13

Re: JSF кирилица

Няма конвертор. Достатъчно е да добавиш необходимите хедъри на съответната jspx страница.

Отговор
в отговор на bion #14

Re: JSF кирилица

А ако страницата не е jspx ?

The human knowledge belongs to the world.
Отговор
в отговор на Matrix_N #15

Re: JSF кирилица

:))))) за това не мога да ти кажа. Обаче аз за нищо на света не пиша чисти jsp-та . Не ми се занимава със архаизми. Даже недоумявам как още хората продължават да се занимаат със тях.
Да не говорим пък за хроничната мигрена която получавам от тях.

Редактирано от bion на

Отговор
в отговор на bion #16

Re: JSF кирилица

Кой ти говори за чисти jsp'та? View'тата не само в jspx се пишат.

The human knowledge belongs to the world.
Отговор
в отговор на Matrix_N #17

Re: JSF кирилица

Виж аз под jsp страница разбирам страница която не е well formed бетер jspx може да имаш JSF страница и отново да е jsp. За да внеса яснота ще кажа че ползвам само JSP2.0 и JSP2.1 стандарта. Бих ползвал и 1.х но тогава разни индивидчета започват да пишат като бесни скриплети и джава скрипт където сварят и качеството на кода пада под нулата. Освен това при JSP2.х има Unified Expression Language и JSTL таговете почти всичките работят. Докато ако ползваш JSP 1.х по голямата част от JSTL таговете се дънят яко.
Всичко което казвам го казвам от гледна точка на JSF

Редактирано от bion на

Отговор