2017-10-29 28 views
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生成异常的方法。

+0

您正在提供'message.properties'文件的内容。同时在你的代码中你有'messageSource.setBasenames(“/ messages/messages”)'。注意最后的's'。这是一个错字吗? –

+0

对不起,这是一个在stackoverflow后的错字。项目名称是正确的。 – ariiiiiii

回答

0

将Resource Bundle消息(包含message.properties)从资源目录移至webapp解决了问题。