gpt4 book ai didi

java - 如果类不在 servlet-context 的基础包中,则为 "No message found under code"。为什么?

转载 作者:行者123 更新时间:2023-11-30 03:27:49 28 4
gpt4 key购买 nike

它是 servlet-context 中与内部化相关的部分。

<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 页面或 Controller 包内获取消息,一切正常:

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

但它无法在 servlet-context 中定义的包之外工作,尽管 messageSource bean 是 Autowiring 的。

这是否意味着 root-context 具有默认的 messageSource,并且在 servlet-context 中它仅针对特定包被覆盖?

最佳答案

在 ServletContext 中为特定 Controller 定义的配置始终会覆盖 rootContext 的配置。它对于根上下文来说也是私有(private)的。

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

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

关于java - 如果类不在 servlet-context 的基础包中,则为 "No message found under code"。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29765762/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com