1
<ul class="nav">
    <li class="active"><a href="home.xhtml">Home</a></li>
    <li><a href="about.xhtml">About us</a></li>
    <li><a href="contact.xhtml">Contact us</a></li>                         
</ul>

各ページに含める必要がないように、JSF を使用してこれをテンプレート化する簡単な方法はありますか?

4

2 に答える 2

11

EL で使用#{view.viewId}して、現在のビュー ID を取得できます。

したがって、これはすべてのページで一般的なものにする必要があります。

<ul class="nav">
    <li class="#{view.viewId == '/home.xhtml' ? 'active' : ''}"><a href="home.xhtml">Home</a></li>
    <li class="#{view.viewId == '/about.xhtml' ? 'active' : ''}"><a href="about.xhtml">About us</a></li>
    <li class="#{view.viewId == '/contact.xhtml' ? 'active' : ''}"><a href="contact.xhtml">Contact us</a></li>                         
</ul>

ELスコープのどこかにページのコレクションがある場合は、よりDRYになります。

<ul class="nav">
    <ui:repeat value="#{app.pages}" var="page">
        <li class="#{view.viewId == page.viewId ? 'active' : ''}"><h:link value="#{page.title}" outcome="#{page.viewId}" /></li>
    </ui:repeat>
</ul>

<h:link>は URL の先頭にコンテキスト パスを自動的に追加するため/、ビュー ID が含まれていても問題ないことに注意してください。

于 2012-09-18T12:38:45.060 に答える