2012-12-17 17 views
0

Struts2 + Freemarker。下面的代碼工作正常,但我想知道任何人都可以更簡化它。我看到重複的代碼來生成HTML標籤。簡化Freemarker條件來製作struts2自定義導航

下面的代碼看起來很多生成自定義菜單,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> 

回答

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和顯示/隱藏物品的包裝股利。

+0

謝謝。好的一段代碼。讓我嘗試一下,我接受它作爲答案。但是,如果我們使用JSP,應該使用標記文件而不是宏。那是對的嗎?任何建議。我正在使用Struts2 + Tiles +標記文件+ Javatemplate。 – Pirzada

+0

使用標籤是JSP最常用的方法。你不能直接在JSP中使用宏。 –