3

Spring MVC LocaleChangeInterceptor を使用してロケールの変更を処理しています。現在の URL の既存のパラメーターを保持しながら、現在のページを英語とフランス語の間で切り替えるには、2 つの簡単なリンクが必要です。

私が思いついた解決策はかなり醜く見えます。現在のページにリンクするための空の値を持つ c:url タグと、2 回表示したくない言語パラメーターを除く既存のパラメーターを追加するためのループ。したがって、コードは次のとおりです。

<c:url value="" var="englishURL">
    <c:forEach items="${param}" var="currentParam">
        <c:if test="${currentParam.key != 'siteLanguage'}">
            <c:param name="${currentParam.key}" value="${currentParam.value}"/>
        </c:if>
    </c:forEach>
    <c:param name="siteLanguage" value="en"/>
</c:url>
<c:url value="" var="frenchURL">
    <c:forEach items="${param}" var="currentParam">
        <c:if test="${currentParam.key != 'siteLanguage'}">
            <c:param name="${currentParam.key}" value="${currentParam.value}"/>
        </c:if>
    </c:forEach>
    <c:param name="siteLanguage" value="fr"/>
</c:url>
<a href="${englishURL}">English</a> / <a href="${frenchURL}">Français</a>

誰かがこれらのリンクを作成するためのより醜い方法を持っていますか? 重複を避けるためにカスタムタグを作成できることはわかっていますが、タグとすべてを宣言する必要があるため、それは非常に小さな改善だと感じています。

4

2 に答える 2

2

それほど醜いわけではありませんが、少なくともコードの重複が少なくなります

<c:forEach var="tuple" items="${fn:split('en,English|fr,Français|nl,Nederlands', '|')}" varStatus="status">
  <c:set var="locale" value="${fn:split(tuple, ',')[0]}"/>
  <c:set var="name" value="${fn:split(tuple, ',')[1]}"/>
  <c:url value="" var="url">
    <c:forEach items="${param}" var="currentParam">
      <c:if test="${currentParam.key != 'changeLocale'}">
        <c:param name="${currentParam.key}" value="${currentParam.value}"/>
      </c:if>
    </c:forEach>
    <c:param name="changeLocale" value="${locale}"/>
  </c:url>
  <a href="${url}">${name}</a>
  <c:if test="${not status.last}"> / </c:if>
</c:forEach>
于 2012-07-18T08:40:11.607 に答える
0

あなたの質問から、毎回あなたのURLにsiteLanguageパラメータを追加しているようです。それが正しいか?なぜこれを行う必要があるのですか?この言語の変更をセッションまたは Cookie に保存すると、siteLanguage パラメーターを指定する必要がなくなります。言語が選択されると、言語パラメータがセッションまたは Cookie に保存されます。そして春は残りのもの自体を管理します。

LocaleChangeInterceptor と共に SessionLocaleResolver または CookieLocaleResolver を指定するだけです。それはあなたのためにこれを行います。

これがお役に立てば幸いです。乾杯。

于 2012-06-20T06:11:38.767 に答える