2011-08-22 28 views
2

我正在尋找一種策略來避免我的站點上的代碼重複。Facelets策略來識別當前選定的列表項目

問題是我有一個無序的列表,它在每個代碼頁中重複出現。 原因是我有一個列表項目包含一個錨點來標識當前頁面。這在我編碼的每一頁中都會重複。 原因是我有一個列表項目包含一個錨點來標識當前頁面。 這使我可以用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> 

回答

2

在JSF中你可以得到由

#{facesContext.viewRoot.viewId} 

當前視圖ID它將返回視圖文件的web內容相對路徑,例如/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的聯繫?

+0

非常感謝。我在網上很多地方都很喜歡你的作品。我知道從我看到您的回覆的那一刻,問題得到解答... – thejartender

+1

不客氣。 – BalusC

+0

只是出於興趣是否有一個API方法,以java.lang.String格式返回完整的URL?我需要根據它所在的目錄來測試頁面上下文。關於錨點不僅僅是關於頁面,還是/ about目錄中的所有頁面?我在IDEA中看不到一個方法,它提供了一個表示url的字符串... – thejartender

相關問題