0

我正在尝试构建一个 Spring MVC 应用程序(基本上是出于自我训练的原因)。这个应用程序有spring MVC、tiles、spring them和jsp(很抱歉给所有编号,但因为我不确定我做错了什么,我只想给所有我认为可能对你有帮助的编号)。

我的 spring mvc 配置似乎有效,直到我尝试通过 org.springframework.context.support.ReloadableResourceBundleMessageSource 从属性文件中获取消息属性。所以这是我的配置

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource" p:cacheSeconds="3000">
    <property name="basenames">
        <list>
            <value>messages</value>
            <value>dev</value>
            <value>theme</value>
        </list>         
    </property>
</bean>  


<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer" p:definitions="/WEB-INF/tiles-defs/tiles-defs.xml" />
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver" p:basename="views" />


<!-- Declare the Interceptor -->
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" p:paramName="language"/>
<bean id="themeChangeInterceptor" class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" p:paramName="theme"/>

<!-- Declare the Resolver -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>
<bean id="themeResolver" class="org.springframework.web.servlet.theme.SessionThemeResolver"/>

<!-- Spring themes -->
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
    <property name="interceptors">
        <list>
            <ref local="themeChangeInterceptor" />
            <ref bean="localeChangeInterceptor" />                          
        </list>
    </property>
</bean>

瓷砖和主题似乎有效,所以在我的瓷砖基础布局中,我有:

<title><tiles:insertAttribute name="title" ignore="true" /></title>
    <c:set var="css"><spring:theme code="css"/></c:set>
    <c:if test="${not empty css}">
        <link rel="stylesheet" href="<c:url value='${css}'/>" type="text/css"/>
    </c:if>

这行得通!html 使用正确的 css 呈现,该 css 属性位于从 ReloadableResourceBundleMessageSource 加载的 theme.properties 文件中,并且神奇地存在于图块中!

所以,鼓起勇气我去我的jsp并插入尝试1:

 <p><spring:message code="context"/></p>

尝试2:

<p><fmt:message key="context"/></p>

使用的标签:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

(有区别吗?两者都有效?都在网上看到...所以我尝试了第一个,然后是第二个)

在messages.properties/messages_el_gr.properties 文件中,我输入context=default 和context=greek。

这在第一种情况下给了我例外,而在第二种情况下,只是前缀和后缀为 ??? 的字符串上下文。我得到的例外是:

严重:servlet [dispatcher] 在路径 [/homeAutomation] 的上下文中的 Servlet.service() 引发异常 [请求处理失败;嵌套异常是 org.apache.tiles.impl.CannotRenderException: ServletException include path '/WEB-INF/tiles/baseLayout.jsp'.] 根本原因 javax.servlet.jsp.JspTagException: No message found under code 'context' for语言环境“el_GR”。在 org.springframework.web.servlet.tags.MessageTag.doStartTagInternal(MessageTag.java:184) 在 org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79) 在 org.apache.jsp.WEB_002dINF .jsp.friends_jsp._jspx_meth_spring_005fmessage_005f0(friends_jsp.java:104) 在 org.apache.jsp.WEB_002dINF.jsp.friends_jsp._jspService(friends_jsp.java:75) 在 org.apache.jasper.runtime.HttpJspBase。

我认为我的上下文中没有 messageSource,所以我认为下一步是搜索正在执行以下操作(在网络上找到)

@Autowired
ReloadableResourceBundleMessageSource messageSource;
@RequestMapping("/friends.htm")
public ModelAndView getPage()
{   
    ModelAndView modelAndView=new ModelAndView("friends");
    modelAndView.addObject(messageSource);
    return modelAndView;
}

顺便说一句,我的 previeus 控制器的方法如下:

@RequestMapping("/friends.htm")
public String getPage()
{   
    return friends;
}

这再次引发相同的异常.. messageSource 不为空.. 它是自动装配的。如果我在控制器内部执行:messageSource.getMessage(“context”,null,Locale.ENGLISH),这会在尝试获取它时引发相同的异常..(希腊语言环境不存在??使用英语它将转到默认语言环境属性文件是messages.properties,对吗?)

啊,我还能给你什么...是的,属性文件位于 src/main/resources 目录中,并且在 homeAutomation.war\WEB-INF\classes\ 和 homeAutomation.war 内的战争中(为什么??我以为这些会仅存在于 homeautomation.war 目录中......但跳过这个,至少它们在那里......)我的 poms 战争插件配置如下:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <webResources>
                    <resource>
                        <directory>src/main/resources</directory>
                    </resource>
                </webResources>
            </configuration>
        </plugin>

再次在目标目录中,我在 target\classes 目录和 target\homeAutomation 中都看到了属性文件。

毕竟这些,我仍然不知道我做错了什么,我无法在我的 jsp 工作中获得本地化的属性。我希望我提供了所有必要的信息(抱歉信息太多......,不知道哪些是相关的,哪些不是)。如果您需要更多信息,请询问。已经找了五天了,还是没有头绪。

4

1 回答 1

1

您可以使用<p><spring:message code="context"/></p> ,但您应该拥有context= what you want以下文件之一:

  • messages_el_GR.properties
  • dev_el_GR.properties
  • theme_el_GR.properties
于 2012-10-17T17:12:13.143 回答