2013-12-20 4 views
0

Мне нужна помощь по следующей проблеме. У нас есть существующее веб-приложение, которое вообще не использует фреймворк (просто сервлеты), и нам нужно добавить новые функции, но вместо добавления нового сервлета в web.xml мы добавим Struts 1 вместе с Spring.Struts 1 пользовательская локализация

Поскольку проект уже существует, мы должны настроить Struts, чтобы иметь возможность соглашаться с уже существующими соглашениями. Одна из них - локализация.

Вместо использование файлов .Property Свойства, все локализуемые тексты из нашей базы данных, чтобы я реализовал свой собственный MessageResourcesFactory и MessageResources классов. Проблема в том, что в нашем приложении мы получаем пользовательский язык из атрибута сеанса Integer, называемого «LANGUAGE», а не из атрибута Locale «org.apache.struts.action.LOCALE», который Struts использует по умолчанию.

Вопрос в том, что. Как сообщить Struts для получения пользовательского языка из моего настраиваемого атрибута Integer вместо атрибута stantard Locale?

Спасибо.

ответ

1

Насколько я знаю, нет прямого способа сообщить Struts использовать другой атрибут сеанса для использования локали. И даже если Struts может это сделать, вам нужно будет реализовать сопоставление между вашим пользовательским целым и «реальным» объектом Locale.

Мои предложения:

  • реализовать свой собственный javax.servlet.http.HttpSessionAttributeListener, который синхронизирует ЯЗЫКА атрибута соответствующих Struts атрибута локалей
  • Или изменить код, в котором вы установили свой ЯЗЫКА атрибута также установить Struts session attribute
+0

Я думаю, что это наиболее подходящее решение, так как оно непосредственно атакует проблему, что в итоге позволяет синхронизировать два атрибута сеанса. Благодарю. –

0

Другим решением будет установка filte г, которые будут перехватывать ЯЗЫК и установить согласно Struts Locale, прежде чем executiong действие:

public class localeFilter implements Filter 
{ 

    public void destroy() 
    { 

    } 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws Exception 
    { 
     // read the int LANGUAGE and set the Locale used by Struts 
    } 

    public void init(FilterConfig filterConfig) throws ServletException 
    { 

    } 

} 

и объявить фильтр в web.xml:

<filter> 
    <filter-name>localeFilter</filter-name> 
    <filter-class>com.example.filters.MyFilter</filter-class> 
    </filter> 

    <filter-mapping> 
    <filter-name>localeFilter</filter-name> 
    <url-pattern>*.do</url-pattern> 
    </filter-mapping> 
0

Решение состоит в том, чтобы расширить ActionServlet и переопределить методы doGet и doPost, чтобы изменить локаль, поставив ее перед запросом до process(). Вроде

String locale = "your_locale"; 
request.getSession().setAttribute(Globals.LOCALE_KEY, new Locale(locale)); 
Смежные вопросы