2017-10-29 6 views
1

フォームを検証しようとすると、messageSource.getMessage(...)メソッドの呼び出しにNoSuchMessageExceptionsが表示されます。ここでロケール '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(...)を呼び出しているとき、テストクラスですべてうまくいくということです。私は、テストのメソッドinvokationが例外を生成しない理由を見つけることができません

@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:ここ

は、テストクラスのメソッドでありますシステムのサービスのvalidateUserCompany()メソッドは、テストクラスでも正しく動作します。

Spring Webflowを使用して例外を生成するメソッドを呼び出しています。

+0

'message.properties'ファイルの内容を提供しています。あなたのコードで同時に 'messageSource.setBasenames("/messages/messages ")'があります。最後の 's'に注意してください。これはタイプミスですか? –

+0

申し訳ありません、それは、stackoverflowの投稿のtypoです。プロジェクトの名前は正しいです。 – ariiiiiii

答えて

0

リソースバンドルメッセージ(message.propertiesを含む)をresourcesディレクトリからwebappに移動することで問題が解決されました。

関連する問題