【发布时间】:2017-11-20 06:03:51
【问题描述】:
我想在我的 Spring Boot 项目中添加一个 messages_en_US 文件,并用它来填充 Freemarker 占位符。在以前的项目中,我自己设置配置(不在 Spring Boot 中的项目)它正在工作。
现在我在 /src/main/resources 文件夹下有 messages_en_US.properties 和 messages_pl.properties 文件,Spring 抛出异常:
----
FTL stack trace ("~" means nesting-related):
- Failed at: ${springMacroRequestContext.getMessag... [in template "spring.ftl" in macro "message" at line 28, column 22]
- Reached through: @spring.message "title" [in template "header.ftl" at line 17, column 9]
- Reached through: #include "header.ftl" [in template "index.ftl" at line 1, column 1]
----] with root cause
org.springframework.context.NoSuchMessageException: No message found under code 'title' for locale 'pl'.
at org.springframework.context.support.DelegatingMessageSource.getMessage(DelegatingMessageSource.java:69) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getMessage(AbstractApplicationContext.java:1232) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.REL
EASE]
at org.springframework.web.servlet.support.RequestContext.getMessage(RequestContext.java:710) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.web.servlet.support.RequestContext.getMessage(RequestContext.java:676) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_66]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_66]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_66]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_66]
at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:1458) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.ext.beans.ReflectionCallableMemberDescriptor.invokeMethod(ReflectionCallableMemberDescriptor.java:52) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.ext.beans.MemberAndArguments.invokeMethod(MemberAndArguments.java:48) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.ext.beans.OverloadedMethodsModel.exec(OverloadedMethodsModel.java:62) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.MethodCall._eval(MethodCall.java:62) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.Expression.eval(Expression.java:78) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.Expression.evalAndCoerceToString(Expression.java:82) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.DollarVariable.accept(DollarVariable.java:41) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.Environment.visit(Environment.java:324) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.Macro$Context.runMacro(Macro.java:184) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.Environment.invoke(Environment.java:701) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.UnifiedCall.accept(UnifiedCall.java:84) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.Environment.visit(Environment.java:324) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.MixedContent.accept(MixedContent.java:54) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.Environment.visit(Environment.java:324) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.Environment.include(Environment.java:2072) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.Include.accept(Include.java:167) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.Environment.visit(Environment.java:324) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.MixedContent.accept(MixedContent.java:54) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.Environment.visit(Environment.java:324) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.core.Environment.process(Environment.java:302) ~[freemarker-2.3.23.jar:2.3.23]
at freemarker.template.Template.process(Template.java:325) ~[freemarker-2.3.23.jar:2.3.23]
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:367) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:284) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:234) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RE
LEASE]
at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.REL
EASE]
来吧 Spring Boot! 我敢打赌,Spring Boot 已经有国际化 bean 的配置,我不应该手动设置它。我对吗? 也许我应该重命名我的消息文件或将其放入另一个目录?
【问题讨论】:
-
您还必须在另一个 2 旁边有一个
messages.properties。您是仅使用自动配置还是手动设置? -
我也有 messages.properties 文件,但它是一个空文件。只要我们在谈论消息和国际化,我只使用自动配置。
-
我实际上是指像免费标记这样的 MVC 部分,或者您是否为此使用 Spring Boot 配置?
-
是的。一切都是由 Spring Boot 自动配置的,除了我覆盖的 Spring Security conf。
标签: java spring spring-boot