Struts2 + Freemarker。下面的代码工作正常,但我想知道任何人都可以简化它。我看到重复的代码生成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>
答案 0 :(得分: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并根据它显示/隐藏项目。