在区域设置代码下找不到任何消息' pl_PL'

时间:2017-10-29 00:19:44

标签: java spring spring-boot

当我尝试验证表单时,我正在为messageSource.getMessage(...)方法调用获取NoSuchMessageExceptions。

以下是验证方法:

@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));
    }

我无法找到测试中的方法调用不会产生异常的原因,但系统其他部分的方法调用也是如此。 Service中的validateUserCompany()方法也可以在测试类中正常工作。

我正在调用使用Spring Webflow生成异常的方法。

1 个答案:

答案 0 :(得分:0)

将Resource Bundle消息(包含message.properties)从resources目录移动到webapp解决了这个问题。