Какой самый простой способ определить переход, который переключает локаль и возвращает в текущее состояние просмотра? - PullRequest
0 голосов
/ 29 февраля 2012

Мы настроили LocaleChangeInterceptor, если это поможет.

(Первоначально отправлено на http://forum.springsource.org/showthread.php?123391-Transition-to-set-locale)

Ответы [ 2 ]

1 голос
/ 14 января 2016

Лучше было бы использовать существующие компоненты. Вот фрагмент Spring WebFlow, настроенный для использования «LocaleChangeInterceptor»:

@Bean
public FlowHandlerMapping flowHandlerMapping(FlowDefinitionRegistry flowDefinitionRegistry) {
    FlowHandlerMapping handlerMapping = new FlowHandlerMapping();
    handlerMapping.setInterceptors(new Object[] { localeChangeInterceptor() });
    // ... other configuration
    return handlerMapping;
}

/**
 * @category locale_switcher
 */
@Bean
public SessionLocaleResolver localeResolver() {
    SessionLocaleResolver localeResolver = new SessionLocaleResolver();
    localeResolver.setDefaultLocale(Locale.ENGLISH);
    return localeResolver;
}

/**
 * @category locale_switcher
 */
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
    LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
    localeChangeInterceptor.setParamName("lang");
    return localeChangeInterceptor;
}

Как это работает:

http://localhost:8080/myflow?execution=e1s1&lang=en
1 голос
/ 14 марта 2012

Это не то, что я искал, но это единственное, что я нашел, чтобы сделать. То есть я создал метод действия для вызова из перехода:

    <transition on="switchLanguage" validate="false">
        <evaluate expression="myAction.switchLanguage"/>
    </transition>

И

public Event switchLanguage(RequestContext context)
{
    // get the "other" locale string itself from the current locale's resource bundle
    Locale locale = context.getExternalContext().getLocale();
    MessageSource ms = context.getActiveFlow().getApplicationContext();
    String newLocaleString = ms.getMessage("lang.other", null, locale);

    HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getNativeRequest();
    HttpServletResponse res = (HttpServletResponse) context.getExternalContext().getNativeResponse();

    LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(req);
    localeResolver.setLocale(req, res, StringUtils.parseLocaleString(newLocaleString));
    return success();
}
...