1
当我尝试验证表单时,我得到了用于messageSource.getMessage(...)方法调用的NoSuchMessageExceptions。在代码为locale'pl_PL'时找不到消息
下面是验证方法:
@Override
public Event validateUserCompany(NewUserCompanyForm userCompanyForm,MessageContext messageContext) {
MessageBuilder error = new MessageBuilder().error();
boolean eMailIsUsed=userCompanyDao.ifEmailIsUsed(userCompanyForm.getUserName());
boolean companyNameIsUsed=userCompanyDao.ifCompanyNameIsUsed(userCompanyForm.getCompanyName());
if(!eMailIsUsed && !companyNameIsUsed){
return new EventFactorySupport().success(this);
}else if(eMailIsUsed){
error.source("userName");
error.defaultText(messageSource.getMessage("message.userName.isUsed",null, LocaleContextHolder.getLocale()));
messageContext.addMessage(error.build());
}else if(companyNameIsUsed){
error.source("companyName");
error.defaultText(messageSource.getMessage("message.companyName.isUsed",null, LocaleContextHolder.getLocale()));
messageContext.addMessage(error.build());
}
return new EventFactorySupport().error(this);
}
,我得到的唯一的例外是:
org.springframework.context.NoSuchMessageException: No message found under code 'message.userName.isUsed' for locale 'pl_PL'.
这里是message.properties文件的内容:
message.userName.isUsed= Message1.
message.companyName.isUsed= Message2.
这里是MessageSource bean:
@Bean
public MessageSource messageSource(){
ReloadableResourceBundleMessageSource messageSource=new ReloadableResourceBundleMessageSource();
messageSource.setDefaultEncoding("UTF-8");
messageSource.setBasenames("/messages/messages");
return messageSource;
}
消息目录位于路径/ src/main/resources中。
奇怪的是,当我在测试类中调用messageSource.getMessage(...)时,一切都很顺利。
这是在测试类中的方法:
@Test
public void messageSourceTest(){
Assert.assertNotNull(messageSource.getMessage("message.companyName.isUsed",null, Locale.forLanguageTag("pl_PL")));
Assert.assertNotNull(messageSource.getMessage("message.userName.isUsed",null, Locale.forLanguageTag("pl_PL")));
Assert.assertNotNull(messageSource.getMessage("message.companyName.isUsed",null, Locale.ENGLISH));
Assert.assertNotNull(messageSource.getMessage("message.userName.isUsed",null, Locale.ENGLISH));
}
我无法找到一个理由,为什么在测试方法invokation不会产生异常,但在其他部分相同的方法invokation的系统。 Service中的validateUserCompany()方法在测试类中也能正常工作。
我正在调用使用Spring Webflow生成异常的方法。
您正在提供'message.properties'文件的内容。同时在你的代码中你有'messageSource.setBasenames(“/ messages/messages”)'。注意最后的's'。这是一个错字吗? –
对不起,这是一个在stackoverflow后的错字。项目名称是正确的。 – ariiiiiii