Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSF проблема с кодировкой 
:(
    Опции темы
vzf
Дата 16.6.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 10.9.2005

Репутация: 2
Всего: 5



Здравствуйте.

Пишу приложение на JSF. Возникла проблема с кодировкой.


Код

<h:outputLink value="#{link.addressForSetup}"
                                                  class="left_menu"
                                                  target="_blank"
                                                  title="#{link.addressForSetup}">


Значение link.addressForSetup тащится из базы данных и представляют собой ссылку на файл.
В ссылке есть как английские так и русские символы.
Проблема заключается в том, что при отрисовки страницы. Титл ссылки (alt) отображается нормальн и русские символы и английсские, но
в значение самой ссылке (href) русские символы отображаются как %251E%2511%2529%2518%2515/6.%252 и поэтому сама ссылка получается неправильной, т.е. при нажатии на нее браузер не может окрыть файл.

Как исправить эту проблему и в чем тут дело? Это мой косяк или бага JSF?
--------------------
Java - Write Once, Test EveryWhere!
PM MAIL   Вверх
Stampede
Дата 16.6.2007, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



vzf, никакого косяка нет, все по спеку smile

Просто стандартом HTTP предусмотрено определенное множество символов, которые могут присутствовать в URL, и русские буквы, к сожалению, в это множество не попадают. Те символы, которые не входят в число базовых, передаются двоичными кодами. Какими именно - зависит от испольуемой кодировки. Консорциум W3C сильно советует использовать UTF-8 (похоже, в приведенном тобой примере строка закодирована именно в ней).

Для того чтобы программисту самому не страдать с закодированием/раскодированием УРЛов, в Java предусмотрены два класса-утилиты, URLEncoder и URLDecoder, у которых есть соответствующие статические методы encode(String url, String encoding) и decode(String url, String encoding). Вот их как раз и надо использовать для преобразования одного в другое. Вот описания этих классов:

Если файлы, о которых ты говоришь, выдаются напрямую дефолтным сервлетом, то значит надо подменить его своим собственным, который будет правильно раскодировать имена файлов с русскими буквами.

Успехов!



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
vzf
Дата 29.6.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 10.9.2005

Репутация: 2
Всего: 5



Спасибо за разъяснение. С обычными html ссылками у меня получилось, а вот с сылками на локальные ресурсы проблемы.

Вот написал простенькую страницу JSF и бин к ней для демонстрации проблемы.

Бин.

Код

import java.io.UnsupportedEncodingException;

import java.net.URLEncoder;

public class LinkBean {
    public LinkBean() {
    }
    private String link = "\\\\host531\\Книги";

    public void setLink(String link) {
        this.link = link;
    }

    public String getLink() {
        try {
            System.out.println("original link: " + link);
            link = URLEncoder.encode(link,"UTF-8");
            System.out.println("encoded link: " + link);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return link;
    }
}



Страница

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<f:view>
  <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
      <title>Page 1</title>
    </head>
    <body>
    <h:form>
    <h:outputText value="Link"/>
    <br/>
    <h:outputLink value="#{linkBean.link}"
                  title="тест">
    <h:outputText value="click me"/>
    </h:outputLink>
    
    </h:form>
    </body>
  </html>
</f:view>


После перекодировки получаю.

Код

encoded link: %5C%5Chost531%5C%D0%9A%D0%BD%D0%B8%D0%B3%D0%B8


На странице получается ссылка

Код

http://localhost:8991/linkTest/faces/%5C%5Chost531%5C%D0%9A%D0%BD%D0%B8%D0%B3%D0%B8;jsessionid=0a10095e231f83040d7ca8364824b1338f56cfa42e47


Но это ладно, самое обидное что даже если в браузере вручную вбить

%5C%5Chost531%5C%D0%9A%D0%BD%D0%B8%D0%B3%D0%B8

Ресурс не откроется :(


Это сообщение отредактировал(а) vzf - 29.6.2007, 14:24
--------------------
Java - Write Once, Test EveryWhere!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0596 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.