0

ファイルRequestMappingからのURLを現在の変数に応じて変数にしようとしていますResourcesLocale

を使用しようとしましたPlaceHoldersが、ファイルからロードする必要があることはわかっていPropertiesます。さらにBean、実行時にロードするLocale必要があるため、デフォルトで1回だけロードされるため、 Locale が変更された場合でも、デフォルトからロードし続けますLocale>en_US

何か案は ?

私の試み:

public class CustomPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        setProperties(convertResourceBundleToProperties(ResourceBundle.getBundle("urls", LocaleContextHolder.getLocale())));
        super.postProcessBeanFactory(beanFactory);
    }
}

で呼び出しBeanます:

@Bean
public CustomPropertyPlaceholderConfigurer CustomPropertyPlaceholderConfigurer(){
    return new CustomPropertyPlaceholderConfigurer();
}

リソースurls_ab.properties:

url.controller1=test

コントローラー:

@RequestMapping(value = "/${url.controller1}", method = RequestMethod.GET)
public String dd(ModelMap model){   
    return "__front_container";
}
4

1 に答える 1

0

PropertyPlaceholderConfigurer をサポートするプロパティ ファイルに変更を加える場合、変更を有効にするためにアプリケーションを「更新」する必要があります。ConfigurableApplicationContext をコンテキストとして使用する場合、コンテキストで refresh を呼び出すことができます。課題は、Web アプリケーションでは、web.xml に依存し、コンテキスト オブジェクトに直接依存しないため、新しい/更新されたプロパティをロードするために更新するには、アプリケーションの再起動が必要になるか、または多くの不要なフープが必要になることです。Spring Webflow アプリケーション内の例である以下を検討してください。ロケールは、インターセプターを使用して更新されます。:

public class MyLocaleChangeInterceptor extends org.springframework.web.servlet.i18n.LocaleChangeInterceptor {
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    Locale locale = (Locale) WebUtils.getSessionAttribute(request, LOCALE_SESSION_ATTRIBUTE_NAME);
    if (locale != null) {
        try {
            response.setLocale(locale);
        } catch (Exception ex) {
            response.setLocale(Locale.ENGLISH);
        }
    } else {
        response.setLocale(Locale.ENGLISH);
        response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
    }
    super.postHandle(request, response, handler, modelAndView);
}

}

 /** https://gist.github.com/jkuipers/3537965 Spring LocaleResolver that uses cookies but falls back to the HTTP Session when cookies are disabled*/
public class MyCookieLocaleResolver extends CookieLocaleResolver {
private SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
@Override
protected Locale determineDefaultLocale(HttpServletRequest request) {
    return sessionLocaleResolver.resolveLocale(request);
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
    if (locale != null) {
        try {
            response.setLocale(locale);
        } catch (Exception ex) {
            response.setLocale(Locale.ENGLISH);
        }
    } else {
        response.setLocale(Locale.ENGLISH);
        response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
    }
    super.setLocale(request, response, locale);
    sessionLocaleResolver.setLocale(request, response, locale);
}
@Override
public void setDefaultLocale(Locale defaultLocale) {
    sessionLocaleResolver.setDefaultLocale(defaultLocale);
}

}

<!--Then the XML:-->
<bean id="localeChangeInterceptor" class="MyLocaleChangeInterceptor">
    <property name="paramName" value="lang"/>
</bean>
<!-- Saves a locale change using a cookie -->
<bean id="localeResolver" class="MyCookieLocaleResolver" >
    <property name="defaultLocale" value="en" />
</bean>


<!--Then Spring-webflow specific XML settings:-->
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
    <property name="order" value="2"/>
    <property name="flowRegistry" ref="flowRegistry" />
    <property name="interceptors" >
        <list>
            <ref local="localeChangeInterceptor" />
        </list>
    </property>
    <property name="defaultHandler">
        <bean class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />
    </property>
</bean>

Spring MVC (Spring Webflow なし) を使用している場合は、ここで素晴らしい解決策を参照してください: Spring MVC LocaleChangeInterceptor アノテーション ベースが機能しない

MyKong も優れたソリューションを提供しています: http://www.mkyong.com/spring-mvc/spring-mvc-internationalization-example/

于 2016-04-16T22:05:39.213 に答える