2012-04-22 3 views
1

JSF에서 내 웹 앱의 탐색을 작성하려고합니다.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의 오해입니다. 이 형식의 URL은 과 같은 형식으로 변환됩니다. 원격 시스템은이 정보를 사용하지 않습니다. 이 메서드는 파일에 해당하지 않는 리소스에 대해 null을 반환합니다. 이 방법은 거의 쓸모가 없어 응용 프로그램에서 사용하지 않아야합니다.

관련 문제