在哪里放置文字属性?

时间:2016-06-01 20:39:15

标签: java maven google-app-engine spring-mvc

我正在尝试为我的Java Web应用程序进行本地化,但是我收到了一个错误。我正在使用Maven进行依赖,我正在使用Google应用引擎(Jetty Web服务器)。该应用程序使用spring框架。以下是我到目前为止的情况:

项目结构:

enter image description here

messages_en_US.properties

label.firstname=First Name
label.lastname=Last Name

的index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<t:genericpage>
    <jsp:attribute name="title">
      Welcome
    </jsp:attribute>
    <jsp:body>
        <script type="text/javascript" src="../static/js/index.js"></script>
        <div class="flex_container_column">
            <spring:message code="label.firstname" />
            <br>
            <spring:message code="label.lastname" />
            <br>
        </div>
    </jsp:body>
</t:genericpage>

弹簧MVC-servlet.xml中

<mvc:resources mapping="/static/**" location="/static/" />
<mvc:annotation-driven />
<bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

<!-- Resource bundle message: Start -->
<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="messages" />
    <property name="defaultEncoding" value="UTF-8" />
</bean>

<bean id="localeChangeInterceptor"
    class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="lang" />
</bean>

<bean id="localeResolver"
    class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="defaultLocale" value="en" />
</bean>

<bean id="handlerMapping"
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="interceptors">
        <ref bean="localeChangeInterceptor" />
    </property>
</bean>
<!-- Resource bundle message: End -->

错误

WARNING: Nested in javax.servlet.ServletException: javax.servlet.jsp.JspException: javax.servlet.jsp.JspTagException: No message found under code 'label.firstname' for locale 'en_US'.:
javax.servlet.jsp.JspTagException: No message found under code 'label.firstname' for locale 'en_US'.
    at org.springframework.web.servlet.tags.MessageTag.doEndTag(MessageTag.java:200)
    at org.apache.jsp.index_jsp._jspx_meth_spring_005fmessage_005f0(index_jsp.java:110)
    at org.apache.jsp.index_jsp.access$0(index_jsp.java:97)
    at org.apache.jsp.index_jsp$Helper.invoke1(index_jsp.java:176)
    at org.apache.jsp.index_jsp$Helper.invoke(index_jsp.java:205)

的pom.xml

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <warSourceDirectory>WebContent</warSourceDirectory>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

我尝试了一些事情:

  1. 将邮件移至/WEB-INF但我更改了<property name="basename" value="/WEB-INF/messages" />时收到了同样的错误。但根据我的理解,如果我这样做,那么我可能无法在代码中访问它。这就是我最初把它放入资源的原因。
  2. 我从默认消息属性文件名中删除了en_US,但是我收到了同样的错误。
  3. 感谢您关于在何处以及如何设置项目属性文件+ text.properties的帮助。

1 个答案:

答案 0 :(得分:0)

我最终将messages.properties放在/WebContent/WEB-INF/messages/messages.properties中,而我收到错误的原因是因为我定义了2个上下文:

  1. 的applicationContext.xml
  2. 弹簧MVC-servlet.xml中
  3. 我将配置放在spring-mvc-servlet.xml,这不是正确的地方。相反,它应该在applicationContext.xml(父上下文)中。我解决了这个问题,但后来遇到了另一个问题,LocaleChangeInterceptor没有拦截,所以语言无法改变!但问题已解决。