2014-10-09 10 views
1

목록을 반복하고 현재 요소의 특정 속성이 이전 요소와 다른 경우에만 렌더링되도록합니다. 지금은이 :JSF 2 facelets를 사용하여 ListDataModel을 반복 할 때 이전/다음 항목에 액세스 <ui:repeat> 태그

<ui:repeat value="#{myBean.myListDataModel}" var="item" varStatus="itemStatus"> 

    <ui:fragment rendered="#{ 
     itemStatus.first 
     or (myBean.myListDataModelUnwrapped[itemStatus.index-1].category ne item.category) 
    }"> 
     <h1> 
      <h:outputText value="#{item.category}"/> 
     </h1> 
     <!-- can't open a ul here --> 
    </ui:fragment> 

      <li> 
       <h:outputText value="#{item.name}"/> 
      </li> 

    <ui:fragment rendered="#{ 
     itemStatus.last or 
     (myBean.myListDataModelUnwrapped[itemStatus.index+1].category ne item.category) 
    }"> 
     <!-- can't close a ul here --> 
    </ui:fragment> 

</ui:repeat> 

Object[] myListDataModelUnwrapped = 
    (Object[]) ((new ArrayList((List) myListDataModel.getWrappedData())).toArray()); 
  • ListDataModel의 반복 처리를하는 경우, 이전/다음 요소에 액세스 할 수있는 더 좋은 방법은 무엇입니까?

  • <ul></ul> 태그에 목록 요소를 포함시켜 어떻게 정렬 할 수 있습니까? 각 범주 헤더 아래에 유효한 정렬되지 않은 목록이 렌더링됩니까?

답변

1

글쎄, 2 가지 질문이 있는데 첫 번째 해결책으로는 더 좋은 해결책이 없습니다. 나는 항상 당신의 방법으로 그것을 해왔다. 제 2 하나

, A와 해결 방법, 아래와 같이, 당신은 열 수와 가까운 <ul></ul>h:outputText를 사용하여 :

XHTML 코드 :

<h:outputText value="#{testMB.ulStartTag}" escape="false"/> 
... 
<h:outputText value="#{testMB.ulEndTag}" escape="false"/> 

관리 빈 코드 :

public String getUlStartTag() { 
    return "<ul>"; 
} 

public String getUlEndTag() { 
    return "</ul>"; 
} 

ps : "<ul>"h:outputText의 값으로 xhtml에 직접 쓰지 마십시오. 실행시 실패합니다. beca "<"및 ">"문자를 사용하십시오.

+0

팁을 주셔서 감사합니다 .--) 나는 루프를 카테고리의 루프 안에 구축하여 명확하고 단순하게 유지했습니다. 나는'ArrayList'의'ArrayList'를 작성하는 오버 헤드를 추가하지 않고 꽤 작은 목록을 통해 세션 당 한 번만 수행하므로 영향이별로 없기를 바랍니다. – NotGaeL