2017-10-29 29 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解決了問題。