2012-04-22 8 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を使用していますか? –

答えて

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は、/foo/index.xhtmlのように、ビューファイルへのウェブコンテンツ相対パスです。

上記の例の#{view}は、現在のUIViewRootを指しているimplicit EL variableであるため、自分で作成/準備する必要はありません。

+0

完璧に動作します!ありがとうございます – jakubka

+0

ようこそ。 – BalusC

2

これは、getRealPathの誤解です。これにより、形式http://<host>:<port>/<contextPath>/index.htmlのURLがC:\foo\bar\index.htmlのように変換されます。リモートシステムはこの情報を使用しません。このメソッドは、ファイルに対応しないリソースに対してnullを返します。このメソッドはほとんど役に立たず、アプリケーションでは使用しないでください。

関連する問題