4

ビューをレンダリングするための Freemarker テンプレートを使用して、Spring 3.1 を使用する Java webapp があります。特定のアプリケーション プロパティの true/false 値に基づいて、ビューにリンクを条件付きで表示したいと考えています。

で定義された次のアプリ プロパティがありますsrc/main/resources/application.properties

showLink=true

Spring MVC で通常の JSP を使用していた場合、SpEL を使用して、次の値に基づいてリンクを条件付きで表示できますshowLink

<c:if test="${configuration['showLink']}">
    <a href="...">some link</a>
</c:if>

Freemarker テンプレートでこれを行うにはどうすればよいですか? 私はこのようなことをしようとしましたが、それを動作させることができませんでした:

<#assign showLink>${configuration['showLink']}</#assign>

<#if showHelpLink>
    <a href="...">some link</a>
</#if>

Spring freemarker マクロ(spring.ftl 内)を見ましたが、最も近いのは、アプリ プロパティではなく、メッセージ プロパティを取得する機能です。

やってみてうまくいかなかったこと

  1. spring.ftl のマクロを見ましたが、最も近いのはメッセージ プロパティです。

  2. ModelMapまた、私の FreeMarker テンプレートはすべてのページのヘッダーであり、自動インポートされるため、コントローラーに値を挿入してから に入れることはできません。

<bean id="abstractFreemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer" abstract="true">
    ...
    <property name="freemarkerSettings">
        <props>
            <prop key="auto_import">
                /spring.ftl as spring, /myTemplate.ftl as myTemplate
            </prop>
        </props>
    </property>
    ...
</bean>

まだ試していないこと

  1. SpEL のサポートを Freemarker に手動で追加する方法を説明しているブログ投稿を見つけました。私がそれを必要とするこの1つのケースでは、それをすべてやりたくありません。

  2. アプリケーションのプロパティ値を取得するためのカスタム タグ ライブラリを作成すると、freemarker テンプレートで次のようなことができます。

<#assign showLink><foo:getAppProperty name="showLink"/></#assign>
4

3 に答える 3

5

を使用して春にプロパティをロードします

<util:properties id="myProperties" location="classpath:/myprops.properties" />

次に、構成で「freemarkerVariables」属性を使用します。

<bean id="abstractFreemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer" abstract="true">
...
    <property name="freemarkerVariables" ref="staticAttributesMap" />

<util:map id="staticAttributesMap">
    <entry key="var1" value="${var1}" />
    <entry key="var2" value="${var2}" />

    <entry key="myMap">
        <map>
            <entry key="v1" value="${value1}" />
            <entry key="v2" value="${value2}" />
        </map>
    </entry>
</util:map>

ここで、var1 / var2 / value1/value2はファイルのすべてのプロパティです。

このようにfreemarkerのプロパティにアクセスできます

$var1$
$var2$
$myMap.v1$
$myMap.v2$

このソリューションの唯一の欠点は、Freemarkerがプロパティを自動的に使用できないことです。必要なものを追加する必要があります。

于 2013-03-09T15:31:10.287 に答える