0

Struts2 + フリーマーカー。以下のコードは正常に動作していますが、誰でも簡単にできることを知りたいです。HTML タグを生成するコードが繰り返されています。

以下のコードは、3 つのリンクを含むカスタム メニューを生成するために多くのように見えます

誰もがより良い解決策を得ましたか?

 <@s.set var="page" value="com.opensymphony.xwork2.ActionContext.name" />
    <@s.url action="home" var="urlHome" />
    <@s.url action="about" var="urlAbout" />
    <@s.url action="contact" var="urlContact" />

    <#if page=='home'>
        <@currentPage page="%{urlHome}" title="Home"/>
        <@s.a href="%{urlAbout}">About Us</@s.a>
        <@s.a href="%{urlContact}">Contact Us</@s.a>
    <#elseif page=='about' >
        <@s.a href="%{urlHome}">Home</@s.a>
        <@currentPage page="%{urlAbout}" title="About Us"/>
        <@s.a href="%{urlContact}">Contact Us</@s.a>
    <#elseif page=='contact' >
        <@s.a href="%{urlHome}">Home</@s.a>
        <@s.a href="%{urlAbout}">About Us</@s.a>
        <@currentPage page="%{urlContact}" title="Contact Us"/>
    <#else>
        <@currentPage page="%{urlHome}" title="Home"/>
        <@s.a href="%{urlAbout}">About Us</@s.a>
        <@s.a href="%{urlContact}">Contact Us</@s.a>
    </#if>

大きい

<#macro currentPage page title>
    <div class="menu-image">
        <img src="<@s.url value="/images/on-left.gif"/>"/>
    </div>
    <div class="on">
        <@s.a cssClass="over" href="${page}">${title}</@s.a>
    </div>
    <div class="menu-image">
        <img alt="" src="<@s.url value="/images/on-right.gif"/>"/>
    </div>
</#macro>
4

1 に答える 1

1

マクロ内のページの名前を比較するか、マクロの属性として設定します

<@s.set var="page" value="com.opensymphony.xwork2.ActionContext.name" />

<@aPage pageUrl=urlHome title="Home" name="home">
<@aPage pageUrl=urAbout title="About us" name="about">
<@aPage pageUrl=urlContact title="Contact us" name="contact">

<@aPageWithBoolean pageUrl=urlHome title="Home" isOn=(page=="home")>
<@aPageWithBoolean pageUrl=urAbout title="About us" isOn=(page=="about")>
<@aPageWithBoolean pageUrl=urlContact title="Contact" isOn=(page=="contact")>

大きい

<#macro aPage pageUrl title name>
    <#if name == page>
        <div class="menu-image">
            <img src="<@s.url value="/images/on-left.gif"/>"/>
        </div>
        <div class="on">
            <@s.a cssClass="over" href="${pageUrl}">${title}</@s.a>
        </div>
        <div class="menu-image">
           <img alt="" src="<@s.url value="/images/on-right.gif"/>"/>
        </div>
    <#else>
        <@s.a cssClass="over" href="${pageUrl}">${title}</@s.a>
    </#if>
</#macro>

またはブール値で

<#macro aPageWithBoolean pageUrl title isOn=false>
    <#if isOn>
        <div class="menu-image">
            <img src="<@s.url value="/images/on-left.gif"/>"/>
        </div>
        <div class="on">
            <@s.a cssClass="over" href="${pageUrl}">${title}</@s.a>
        </div>
        <div class="menu-image">
           <img alt="" src="<@s.url value="/images/on-right.gif"/>"/>
        </div>
    <#else>
        <@s.a cssClass="over" href="${pageUrl}">${title}</@s.a>
    </#if>
</#macro>

CSS でラッパー div を使用し、それに基づいてアイテムを表示/非表示にすることもできます。

于 2012-12-18T10:28:13.703 に答える