当我尝试在@Controller类中获取消息时,一切正常,但是当我尝试时 要在@Service或@Component类中实现相同的效果,我会收到以下错误:
org.springframework.context.NoSuchMessageException:
No message found under code 'email.ativacao.title' for locale 'pt_BR'.
我的控制器:
@Controller
public class TestController {
@Autowired
TestService service;
@Autowired
TestComponent component;
@Autowired
private MessageSource message;
@RequestMapping(value = "/send", method = RequestMethod.GET)
public String go() {
String message = message.getMessage
("email.ativacao.title", null, new Locale("pt", "BR"));
service.getMessage();
component.getMessage();
return "signsucess";
}
}
我的服务:
@Service
public class TestService {
@Autowired
private MessageSource message;
public void getMessage() {
//Error
String message = message.
getMessage("email.ativacao.title", null, new Locale("pt", "BR"));
}
}
我的组件:
@Component
public class TestComponent {
@Autowired
private MessageSource message;
public void getMessage() {
//Error
String message = message.
getMessage("email.ativacao.title", null, new Locale("pt", "BR"));
}
}
我的配置:
<!-- i18n -->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.
LocaleChangeInterceptor" p:paramName="lang"/>
</mvc:interceptors>
<!-- Mesage Source Config -->
<bean id="messageSource"
class="org.springframework.context.support.
ReloadableResourceBundleMessageSource" p:fallbackToSystemLocale="true" >
<property name="basename" value="WEB-INF/i18n/messages" />
</bean>
<!-- Mapeia o cookie que irá salvar as opções de idioma -->
<bean class="org.springframework.web.servlet.i18n.CookieLocaleResolver"
id="localeResolver" p:cookieName="locale"/>
MessageService在@Service和@Component上都不为null,但是它们无法做到 得到消息(上面的例外)。我的房产:
的WebContent / WEB-INF / I18N
我真的找不到问题。有什么建议可以解决这个问题?感谢。
答案 0 :(得分:11)
根据您的描述,我猜控制器bean和messageSource是在相同的上下文中声明的。那么就可以找到对方了。
如果您的服务bean和控制器bean未在相同的上下文中声明,则您的服务无法找到messageSource。
相同的上下文并不意味着相同的文件。你的one.xml可以包含two.xml。
无论如何,如果它适合你,那就很好。