"No message found under code" 类是否不在 servlet-context 的基本包中。为什么?



它是servlet上下文中与内部化相关的部分。

<context:component-scan base-package="com.project.controllers" />
<interceptors>
<beans:bean
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"
p:paramName="lang" />
<beans:bean
class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" />
</interceptors>
<!-- i18n -->
<beans:bean
class="org.springframework.context.support.ReloadableResourceBundleMessageSource"
id="messageSource" p:basenames="WEB-INF/i18n/messages, WEB-INF/i18n/application"
p:fallbackToSystemLocale="false" />
<beans:bean class="org.springframework.web.servlet.i18n.CookieLocaleResolver"
id="localResolver" p:cookieName="locale" />

根上下文:

<context:component-scan base-package="com.project"/>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en" />
</bean>

如果我试图在jsp页面或controllers包中获取消息,一切都可以:

messageSource.getMessage("message.code", new Object[] {}, locale)

但是它不能在servlet上下文中定义的包中工作,尽管messageSourcebean是自动连接的。

这是否意味着根上下文有默认的messageSource,而在servlet上下文中,它只被特定包覆盖?

在ServletContext中为特定控制器定义的配置总是覆盖rootContext的配置。它对根上下文也是私有的。

放置在servlet上下文中的配置特定于特定的servlet/控制器。如果您需要国际化的全局功能,您应该在根上下文中定义messageSourcebean。

加载ApplicationContext时,它会自动搜索上下文中定义的MessageSource bean。bean的名称必须为messageSource。如果找到这样一个bean,那么对前面方法的所有调用都将委托给消息源。如果找不到消息源,ApplicationContext将尝试查找包含同名bean的父级。如果是这样,则使用该bean作为MessageSource如果ApplicationContext找不到任何消息源,则会实例化一个空的DelegatingMessageSource,以便能够接受对上面定义的方法的调用

最新更新