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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Локализация в Spring 
V
    Опции темы
Terentich
Дата 7.10.2011, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день!

Нникак не могу заставить работать локализацию при использовании LocaleChangeInterceptor (т. е. смена языка на основе ссылки в приложении).
Судя по официальному руководству, а также весьма полезной статье достаточно подобного кода в конфигурационном файле Spring:

Код

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
    <property name="defaultEncoding" value="UTF-8"/>
</bean>
 
<bean id="localeChangeInterceptor"
    class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
</bean>
 
<bean id="localeResolver"
    class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="defaultLocale" value="en"/>
</bean>
 
<bean id="handlerMapping"
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="interceptors">
        <ref bean="localeChangeInterceptor" />
    </property>
</bean>


В тестовом проекте использую Java-конгурирование для Spring.
Листинги основных конфигурационных файлов приведены ниже.

Что наблюдаю:
При нажатии на кнопку смены языка (как на английский, так и на русский) ничего не происходит.
Что требуется:
Переключения языка приложения с помощью кнопки в приложении.

Просьба помочь в решении проблемы. Заранее признателен за вашу помощь!

AppConfig.java:
Код

@Configuration
public class AppConfig {

    @Value("#{database['jdbc.url']}")
    private String url;
    @Value("#{database['jdbc.dialect']}")
    private String dialect;
    @Value("#{database['jdbc.username']}")
    private String username;
    @Value("#{database['jdbc.password']}")
    private String password;

    @Bean
    DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource(url,
                username, password);
        return dataSource;
    }

    @Bean
    SessionFactory sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());

        Properties hibernateProperties = new Properties();
        hibernateProperties.put("hibernate.dialect", dialect);
        hibernateProperties.put("hibernate.show_sql", "true");
        hibernateProperties.put("hibernate.connnection.charSet", "UTF-8");

        sessionFactory.setHibernateProperties(hibernateProperties);

        return sessionFactory.getObject();
    }

    @Bean
    MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:messages");
        messageSource.setDefaultEncoding("UTF-8");

        return messageSource;
    }

    @Bean
    ViewResolver viewResolver() {
        TilesViewResolver viewResolver = new TilesViewResolver();

        return viewResolver;
    }

    @Bean
    LocaleChangeInterceptor localChangeInterceptor() {
        LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();

        return localeChangeInterceptor;
    }

    @Bean
    DefaultAnnotationHandlerMapping defaultAnnotationHandlerMapping(
            LocaleChangeInterceptor localeChangeInterceptor) {
        DefaultAnnotationHandlerMapping defaultAnnotationHandlerMapping = new DefaultAnnotationHandlerMapping();
        defaultAnnotationHandlerMapping
                .setInterceptors(new Object[] { localeChangeInterceptor });

        return defaultAnnotationHandlerMapping;
    }

    @Bean
    LocaleResolver localeResolver() {
        CookieLocaleResolver localeResolver = new CookieLocaleResolver();
        localeResolver.setDefaultLocale(Locale.ENGLISH);

        return localeResolver;
    }

    @Bean
    TilesConfigurer tilesConfigurer() {
        TilesConfigurer tilesConfigurer = new TilesConfigurer();
        tilesConfigurer.setDefinitions(new String[] { "/WEB-INF/tiles.xml" });

        return tilesConfigurer;
    }

    @Bean
    CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setMaxUploadSize(100000);

        return resolver;
    }
}


index.jsp:
Код

<%@ page language="java" contentType="text/html; charset=utf8"
    pageEncoding="utf8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<body>
    <h1>Заголовок страницы</h1>
    <span style="float: right">
    <a href="?locale=en">en</a>
    |
    <a href="?locale=ru">ru</a>
</span>
</body>
</html>


spring.xml:
Код

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
   xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang"
   xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:util="http://www.springframework.org/schema/util"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
   http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
   http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd 
   http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd 
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
   http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
   <context:component-scan base-package="org.terentich.site" />
   <mvc:annotation-driven />
   <util:properties id="database" location="/WEB-INF/database.properties" />
</beans>


web.xml:
Код

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">
   <servlet>
      <servlet-name>dispatcher</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>/WEB-INF/spring.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
      <servlet-name>dispatcher</servlet-name>
      <url-pattern>/</url-pattern>
   </servlet-mapping>
   <filter>
      <filter-name>charsetFilter</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter
      </filter-class>
      <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF-8</param-value>
      </init-param>
      <init-param>
         <param-name>forceEncoding</param-name>
         <param-value>true</param-value>
      </init-param>
   </filter>
   <filter-mapping>
      <filter-name>charsetFilter</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>

PM MAIL   Вверх
MisterCleric
Дата 7.10.2011, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет.
Меня смущает вот это:
Код

 @Bean
    DefaultAnnotationHandlerMapping defaultAnnotationHandlerMapping(
            LocaleChangeInterceptor localeChangeInterceptor) {
        DefaultAnnotationHandlerMapping defaultAnnotationHandlerMapping = new DefaultAnnotationHandlerMapping();
        defaultAnnotationHandlerMapping
                .setInterceptors(new Object[] { localeChangeInterceptor });
        return defaultAnnotationHandlerMapping;
    }

Попробуй так:
Код

 @Bean
    DefaultAnnotationHandlerMapping defaultAnnotationHandlerMapping() {
        DefaultAnnotationHandlerMapping defaultAnnotationHandlerMapping = new DefaultAnnotationHandlerMapping();
        defaultAnnotationHandlerMapping
                .setInterceptors(new Object[] { localChangeInterceptor() });
        return defaultAnnotationHandlerMapping;
    }



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Terentich
Дата 7.10.2011, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



MisterCleric, привет!

Изменил метод defaultAnnotationHandlerMapping так, как ты написал.
Увы, не взлетело. :(

Самое обидное то, что ошибок никаких нет. А может как-то можно подебажить приложение?

Это сообщение отредактировал(а) Terentich - 7.10.2011, 23:03
PM MAIL   Вверх
Terentich
Дата 8.10.2011, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Тьфу, ты черт. 
Столько времени убил! Как жаль...

Смотрим внимательно и не повторяем таких глупых ошибок:

Код

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
   xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang"
   xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:util="http://www.springframework.org/schema/util"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
   http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
   http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd 
   http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd 
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
   http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
   <context:component-scan base-package="org.terentich.site" />
   <mvc:annotation-driven />
   <util:properties id="database" location="/WEB-INF/database.properties" />
</beans>


Это -  <mvc:annotation-driven /> - явно здесь лишнее, потому как уже есть другая строка: <context:component-scan base-package="org.terentich.site" />.
Судя по всему, Spring два раза сканировал компоненты, в результате чего локализации сносило крышу.

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.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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