我正在寻找一种策略,以避免整个网站的代码重复。
问题是我有一个无序的列表,在我编码的每个页面中重复。原因是我有一个列表项,其中包含一个用于标识currentPage的锚。这在我编写的每一页代码中都是重复的。原因是我有一个列表项,其中包含一个用于标识currentPage的锚。这允许我用css对它进行分类。
我如何定义这样一个列表,以便我可以在facelets中动态地更改它?
<ui:define name="leftBar">
<ul class="leftNav">
<li id="home"><a id="**currentPage**" jsfc="h:link" outcome="home">#{global.homeInCaps}</a></li>
<li id="about"><a jsfc="h:link" outcome="about">#{global.aboutInCaps}</a></li>
<li id="blog"><a jsfc="h:link" outcome="blog">#{global.blogInCaps}</a></li>
<li id="tutorials"><a jsfc="h:link" outcome="tutorials">#{global.tutorialsInCaps}</a>
<ul class="leftSubNav">
<li><a jsfc="h:link" outcome="java">#{global.javaNormal}</a>
<ul class="leftSubNav">
<li><a jsfc="h:link" outcome="setupPath">#{global.path}</a></li>
</ul>
</li>
<li><a jsfc="h:link" outcome="ubuntu">#{global.ubuntuNormal}</a></li>
<li><a jsfc="h:link" outcome="virtualbox">#{global.virtualBoxNormal}</a></li>
</ul>
</li>
<li id="contact"><a jsfc="h:link" outcome="contact">#{global.contactInCaps}</a></li>
</ul>
</ui:define>
在JSF中,您可以通过
获取当前视图ID#{facesContext.viewRoot.viewId}
它将返回视图文件的webcontent相对路径,例如/home.xhtml
, /about.xhtml
等。您可以借助EL中的条件操作符来测试它,以设置类名。
<ui:param name="view" value="#{facesContext.viewRoot.viewId}" />
<li id="home"><a jsfc="h:link" outcome="home" class="#{view == '/home.xhtml' ? 'current' : ''}">#{global.homeInCaps}</a></li>
<li id="about"><a jsfc="h:link" outcome="about" class="#{view == '/about.xhtml' ? 'current' : ''}">#{global.aboutInCaps}</a></li>
<li id="blog"><a jsfc="h:link" outcome="blog" class="#{view == '/blog.xhtml' ? 'current' : ''}">#{global.blogInCaps}</a></li>
...
然后可以用CSS
为表示当前页面的链接设置样式.leftNav .current {
color: pink;
}
leftNav
不应该是id
吗?