Facelets策略,用于识别当前选定的列表项

时间:2011-08-22 09:52:09

标签: css jsf facelets

我正在寻找一种策略来避免我网站上的代码重复。

问题是我有一个无序列表,在我编写的每个页面中重复出现。 原因是我有一个列表项,其中包含一个用于标识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>

1 个答案:

答案 0 :(得分:2)

在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吗?