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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> кодировка в ejb плюс кое-что еще 
:(
    Опции темы
zhz
Дата 5.6.2013, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 31.10.2006
Где: Petropavlovsk-Kam chatsky

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



Приветсвую Всех!!
Использую glassfish, PrimeFaces. 
Есть шаблон : 
Код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"
      xml:lang="en" lang="en">
    <f:view contentType="text/html" locale="ru">
        <h:head title="Главная страница справкабат">
            <f:facet name="first">
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <meta http-equiv="pragma" content="no-cache"/>
            <meta http-equiv="cache-control" content="no-cache"/>
            <meta http-equiv="expires" content="0"/>
            </f:facet>
            <ui:insert name="head"/>
        </h:head>
        <h:body>
            <h:panelGroup layout="block" styleClass="slogan">
                   <h:outputText value="Информационная система"/>
            </h:panelGroup>

            <h:form id="mainForm" prependId="false">
                <h:panelGrid columns="2" columnClasses="chaptersMenuColumn,chaptersContentColumn">
                      <h:panelGroup layout="block">
                          <h:graphicImage library="images" name="logo.png" styleClass="logo" title=" логотип"/>

                          <!--Далее должно быть дерево-->

                          <p:tree id="bookTree" value="#{mainController.root}" var="node" selectionMode="single"
                            selection="#{mainController.selectedNode}">
                                <p:ajax event="select" listener="#{mainController.onNodeSelect}"/>
                                <p:treeNode expandedIcon="ui-icon-folder-open"
                                    collapsedIcon="ui-icon-folder-collapsed">
                            <h:outputText value="#{node.name}"/>
                                </p:treeNode>
                                <p:treeNode type="chapteritem" icon="ui-icon-document">
                            <h:outputText value="#{node.name}"/>
                                </p:treeNode>
                            </p:tree>



                          <!--конец дерева-->

                      </h:panelGroup>
                    <h:panelGroup  layout="block" id="panelGroup2">
                        <ui:insert name="chapterItem"/>
                    </h:panelGroup>
                </h:panelGrid>
            </h:form>

           <h:outputStylesheet library="css" name="layout.css"/>
        </h:body>
    </f:view>

</html>

Дерево формируется в контроллере:
Код

@Named("mainController")
@RequestScoped
public class MainViewController  implements Serializable{

    private static final String NODE_TYPE = "chapteritem";
    private TreeNode root ;
    private TreeNode selectedNode;

    private UploadedFile file;

    @Inject
    PhonesServiceLocal phonesServiceFacade;

    public PhonesServiceLocal getPhonesServiceFacade() {
        return phonesServiceFacade;
    }

    public void setPhonesServiceFacade(PhonesServiceLocal phonesServiceFacade) {
        this.phonesServiceFacade = phonesServiceFacade;
    }

    public MainViewController() {
        root = new DefaultTreeNode("Root",null);

        TreeNode firstNode = new DefaultTreeNode(new SiteTreeNode("Раздел_1", null),root);
        TreeNode secondNode= new DefaultTreeNode(new SiteTreeNode("Раздел_2", null),root);
        TreeNode thirdNode = new DefaultTreeNode(new SiteTreeNode("Раздел_3", null),root);
        TreeNode fourthNode = new DefaultTreeNode(new SiteTreeNode("Раздел_4", null),root);

        constructFirstNode(firstNode);
        constructSecondNode(secondNode);
        constructThirdNode(thirdNode);
        constructFourthNode(fourthNode);


    }

    private void constructFirstNode(TreeNode firstNode) {
        new DefaultTreeNode(NODE_TYPE,
                new SiteTreeNode("Подраздел_1","#"),firstNode);
        new DefaultTreeNode(NODE_TYPE,
                new SiteTreeNode("Импорт","notebook/importPhones.xhtml"),firstNode);

        new DefaultTreeNode(NODE_TYPE,
                new SiteTreeNode("Подраздел_2","#"),firstNode);

    }

    private void constructSecondNode(TreeNode secondNode) {
           new DefaultTreeNode(NODE_TYPE,
                new SiteTreeNode("еще какая нить лабуда","#"),secondNode);
    }


    private void constructThirdNode(TreeNode thirdNode) {
           new DefaultTreeNode(NODE_TYPE,
                new SiteTreeNode("Фигня еще одна","#"),thirdNode);
    }

    private void constructFourthNode(TreeNode fourthNode) {
        new DefaultTreeNode(NODE_TYPE,
                new SiteTreeNode("бла блаб бла","#"),fourthNode);
        new DefaultTreeNode(NODE_TYPE,
                new SiteTreeNode("балабабалала","#"),fourthNode);

    }

    public TreeNode getSelectedNode() {
        return selectedNode;
    }

    public void setSelectedNode(TreeNode selectedNode) {
        this.selectedNode = selectedNode;
    }

    public TreeNode getRoot() {
        return root;
    }



    public void onNodeSelect(NodeSelectEvent event) {
        if (root == event.getTreeNode().getParent()) {
            return;
        }
        for (TreeNode treeNode : root.getChildren()) {
            if (treeNode.equals(selectedNode.getParent())) {
                treeNode.setExpanded(true);
            } else {
                treeNode.setExpanded(false);
            }
        }

        FacesContext fc = FacesContext.getCurrentInstance();
        fc.getApplication().getNavigationHandler().handleNavigation(fc, "null",
            "/views/" + ((SiteTreeNode) event.getTreeNode().getData()).getView() + "?faces-redirect=true");

    }

    public void saveTable() {

    }
        public void handleFileUpload(FileUploadEvent event) {
        UploadedFile file = event.getFile() ;
        MessageUtil.addInfoMessage("Файл  " + file.getFileName() + "  загружен успешно");

        phonesServiceFacade.loadItemsFromUploadedFile(file);

    }

}


Так вот в браузере русский язык забитый в xhtml шаблоне отображается нормально, а то что формируется в контроллере отображается кракозябрами (Телефоны). В чем проблема? куда копать?

И еще: на мой взгляд, формирование надписей, названий разделов в контроллере идиологические не верно(при изменении надписи, необходимо перекомпилировать приложение). Как вывести надмиси и тп. в отедльный файл, чтобы в нем все поменять и не перекомпилировать? 
Заранее спасибо

зы. пишу в интеллиджеа, кодировка везде стоит utf-8

Это сообщение отредактировал(а) zhz - 5.6.2013, 03:49
PM MAIL ICQ   Вверх
Pawl
Дата 5.6.2013, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 28



Цитата(zhz @  5.6.2013,  03:48 Найти цитируемый пост)
Так вот в браузере русский язык забитый в xhtml шаблоне отображается нормально, а то что формируется в контроллере отображается кракозябрами (Телефоны). В чем проблема? куда копать?

Вопрос не нов. Нужно во-первых создать фильтр вида
Код

package guest.localization;

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;

//encoding-filter
public class SetCharacterEncodingFilter implements Filter {
    protected String encoding = "UTF-8";
    protected FilterConfig filterConfig;

    public void destroy() {
        encoding = null;
        filterConfig = null;
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding(encoding);
        chain.doFilter(request, response);
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
        if (filterConfig.getInitParameter("encoding") != null) {
            this.encoding = filterConfig.getInitParameter("encoding");
        }
    }
}

И во-вторых прописать его в web.xml:
Код

<filter>
  <filter-name>Filter</filter-name> 
  <filter-class>guest.localization.SetCharacterEncodingFilter</filter-class> 
<init-param>
  <param-name>encoding</param-name> 
  <param-value>UTF-8</param-value> 
  </init-param>
  </filter>
<filter-mapping>
  <filter-name>Filter</filter-name> 
  <url-pattern>/</url-pattern> 
  <dispatcher>REQUEST</dispatcher> 
  <dispatcher>FORWARD</dispatcher> 
  <dispatcher>INCLUDE</dispatcher> 
  <dispatcher>ERROR</dispatcher> 
</filter-mapping>

Цитата(zhz @  5.6.2013,  03:48 Найти цитируемый пост)
И еще: на мой взгляд, формирование надписей, названий разделов в контроллере идиологические не верно(при изменении надписи, необходимо перекомпилировать приложение). Как вывести надмиси и тп. в отедльный файл, чтобы в нем все поменять и не перекомпилировать? 

для этого можно создать проперти-файлы с локализованными сообщениями, типа, msg_ru.propertes, msg_en.propertes и т. д., с содержимым типа
Код

...
paragraf1=Раздел_1
...

т. е. стандартные ключи и значения. Создать класс, читающий эти проперти:
Код

package guest.localization;

import java.util.ResourceBundle;
import static java.util.ResourceBundle.getBundle;

public class Messages {
    public static String getMessage(String lang, String key) {
        String path = "guest/localization/messages/";
        ResourceBundle bundle = ("ru".equals(lang)) ? getBundle(path + "msg_ru") :
                getBundle(path + "msg_en");
        return bundle.getString(key);
    }    
}

где path - путь к проперти-файлу, lang - язык браузера, key - ключ, по которому извлекается нужное значение. В контроллере в нужном месте вызвать метод getMessage, например, 
Код

TreeNode firstNode = new DefaultTreeNode(new SiteTreeNode(Messages.getMessage(lang, "paragraf1"), null),root);

Значение lang получаем в контроллере из запроса:
Код

String lang = request.getLocale().getLanguage();

Если вам надо использовать проперти-файлы в jsp, это можно делать при помощи jstl: сначала подключить нужную библиотеку
Код

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

Далее указать сразу после тэга <html> путь к пропертям:
Код

<fmt:bundle basename="guest.localization.messages.msg">

и в нужном месте вставлять код вида
Код

<fmt:message key = "paragraf1" />

вот, собственно, и все!
Да, и русский язык в пропертях надо кодировать в utf-8 без ВОМ.

Это сообщение отредактировал(а) Pawl - 5.6.2013, 18:13


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
zhz
Дата 6.6.2013, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 31.10.2006
Где: Petropavlovsk-Kam chatsky

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



Спасибо большое!
PM MAIL ICQ   Вверх
Pawl
Дата 6.6.2013, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 28



Цитата(zhz @  6.6.2013,  00:27 Найти цитируемый пост)
Спасибо большое!

Спасибо мало, плюса хватит!  smile 


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

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

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


 




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


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

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