2012-04-22 49 views
1

我正在嘗試在JSF中爲我的web應用程序編寫導航。如何在JSF中獲得絕對url?

我都這樣了,至今:

<ul> 
<ui:repeat value="#{pageBean.getPages()}" var="page"> 
    <li class="#{(pageContext.request.requestURI.endsWith(page.url)) ? 'current_page_item' : '' }"> 
     <a href="#{pageContext.servletContext.getRealPath(page.url)}">#{page.name}</a> 
    </li> 
</ui:repeat> 
</ul> 

但是錨的href屬性始終是空的。此外,我不知道pageContext.request.requestURI.endsWith(page.url)是否正常工作 - 我猜不是,因爲沒有頁面有current_page_item類。

我在做什麼錯?

謝謝!

+0

您使用的是JSF 2.0嗎? – 2012-04-22 19:41:48

回答

4

getRealPath()確實不會做你認爲的事情。閱讀它的javadoc

但是這種方法不必要的過分複雜。如果您將JSF <h:link>組件與視圖ID列表結合使用,則不需要自己生成絕對路徑。如果有的話,<h:link>將自動預先加載正確的上下文路徑。

<ul> 
    <ui:repeat value="#{pageBean.pages}" var="page"> 
     <li class="#{view.viewId == page.viewId ? 'current_page_item' : ''}"> 
      <h:link value="#{page.name}" outcome="#{page.viewId}" /> 
     </li> 
    </ui:repeat> 
</ul> 

視圖ID恰好是JSF在其封面中用來定位視圖和處理導航的頁面標識符。視圖ID是視圖文件的web內容相對路徑,如/foo/index.xhtml

請注意,上例中的#{view}是指向當前UIViewRootimplicit EL variable,因此您不需要自己創建/準備它。

+0

完美的作品!謝謝 – jakubka 2012-04-22 22:20:48

+0

不客氣。 – BalusC 2012-04-22 22:35:33

2

這是對getRealPath做什麼的誤解。這會將表格http://<host>:<port>/<contextPath>/index.html的網址轉換爲C:\foo\bar\index.html之類的網址。遠程系統無法使用這些信息。對於不對應於文件的資源,該方法返回null。該方法大多無用,應用程序應避免使用它。

相關問題