0

私は春のMVCアプリケーションを構築しようとしています(基本的に自己訓練の理由から)。このアプリケーションには、Spring MVC、タイル、Spring Them、および JSP があります (すべてに番号を付けて申し訳ありませんが、何が間違っているのかわからないので、助けになると思われるすべてに番号を付けたいだけです)。

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は、ReloadableResourceBundleMessageSourceからロードされ、魔法のようにタイル内に存在するtheme.propertiesファイル内にあるcssプロパティにある正しいcssでレンダリングされます!

それで、勇気を出して、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" %>

(違いはありますか?両方とも機能しますか?両方ともWeb上で見られます...だから、最初のものと2番目のものを一度試しました)

そして、messages.properties/messages_el_gr.properties ファイルに、context=default および context=greek と入力します。

これにより、最初のケースでは例外が発生し、2番目のケースでは、前後に???が付けられた文字列コンテキストだけが発生します。私が得る例外は次のとおりです。

SEVERE: サーブレット [dispatcher] の Servlet.service() がパス [/homeAutomation] のコンテキストで例外をスローしました [リクエストの処理に失敗しました。ネストされた例外は org.apache.tiles.impl.CannotRenderException: ServletException パス '/WEB-INF/tiles/baseLayout.jsp' を含む] ですロケール「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 を持っていないと考えているので、次のことを行うために何が起こっているのかを検索する次のステップとして検討しました(Webで見つかりました)

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

ちなみに、以前のコントローラーには次のようなメソッドがありました。

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

これは再び同じ例外をスローします..messageSourceはnullではありません..自動配線されています。コントローラー内で行う場合:messageSource.getMessage("context", null, Locale.ENGLISH)、これを取得しようとすると同じ例外がスローされます.. (ギリシャ語のロケールは存在しません?? 英語ではデフォルトのロケールに移動しますproperties ファイルは messages.properties ですよね?)

ああ、私は他に何を与えることができます...はい、プロパティファイルはsrc/main/resourcesディレクトリにあり、homeAutomation.war\WEB-INF\classes\とhomeAutomation.war内で戦争中です(なぜ??私はこれらがhomeautomation.war ディレクトリにのみ存在します...ただし、これはスキップしてください。少なくともそこにはあります...) 私の poms war プラグインの構成は次のとおりです。

<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 内でローカライズされたプロパティを取得できません。必要な情報がすべて提供されたことを願っています(情報が多すぎて申し訳ありません...、どれが関連していてどれが関連していないかわかりませんでした)。さらに情報が必要な場合は、お問い合わせください。この 5 日間を探していますが、まだ手がかりがありません。

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 に答える