2010-06-01 3 views
15

저는 JSF를 처음 접했고 프로젝트를위한 유용성 여부를 결정하기위한 개념 증명을 시도했습니다. 내 POC는 단순히 일부 데이터가 포함 된 테이블이있는 단일 페이지로 구성됩니다.동적 열을 사용하는 DataTable

페이지 수를 렌더링하기 전에 데이터베이스의 열 수와 행 수는 동적입니다. 내가 예상대로 다음과 같이

, 나는 행의 적절한 수의 두 정적 열을 얻을 : 내가하고 싶었던 무엇

<h:dataTable id="data" value="#{viewDataBean.dataRows}" var="row"> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText value="Col 1"/> 
     </f:facet> 
     <h:outputText value="#{row.values[0].value}"/> 
    </h:column> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText value="Col 2"/> 
     </f:facet> 
     <h:outputText value="#{row.values[1].value}"/> 
    </h:column> 
</h:dataTable> 

<h:column>...</h:column> 태그의 단일 세트 주위에 <c:forEach...>을 추가했다 , 열 수 반복하는,하지만 작동하지 않았다 - 나는 다양한 조합을 시도,하지만 난 일을 이런 식으로 뭔가를 기다리고 있었다 : 인터넷 검색에서

<h:dataTable id="data" value="#{viewDataBean.dataRows}" var="row"> 
    <c:forEach items="#{row.values}" var="val"> 
     <h:column> 
      <f:facet name="header"> 
       <h:outputText value="Col 1"/> 
      </f:facet> 
      <h:outputText value="#{val.value}"/> 
     </h:column> 
    </c:forEach> 
</h:dataTable> 

을, 나는 다양한 모호한 의견을 읽었습니다 '그걸하는 방법이 아니야'처럼 나는 옳은 길에 대해 특별히 설득력있는 예를 찾을 수 없었습니다. 누군가가 Backing bean에 DataTable을 빌드하는 것에 대해 언급했지만, 찾을 수있는 유일한 예는 http://forums.sun.com/thread.jspa?threadID=577589입니다. 그것은 효과가 있었지만, 사용 된 방법 중 일부가 사용되지 않기 때문에 다소 어색해했습니다.

핵심 JSF 이외의 라이브러리를 사용할 수있는 가능성은 희박하지만, 꼭 필요한 경우 변경 될 수 있습니다. 누구든지 올바른 방법으로 빛을 발산 할 수 있습니까? 그것은 꽤 간단해야하는 것처럼 보입니다. 그래서 저는 분명히 뭔가 빠져 있다는 것을 확신합니다.

답변

12

JSTL과 JSF는 코딩에서 예상대로 동기화되지 않습니다. JSTL이 처음부터 전체 페이지를 처음부터 끝까지 처리 한 다음 그 결과를 JSF로 넘겨서 추가 처리합니다. #{row}은 JSTL이 통화 중일 때 사용할 수 없으므로 실제로는 작동하지 않습니다.

링크 된 주제에는 실제로 사용되지 않는 메소드가 언급되어 있지만이 주제는 숙성되어 레거시 JSF 1.0/1.1에 대해 설명합니다. 앞서 언급 한 메소드의 현재 Javadocs를 살펴 본다면, 대체 메소드가 언급 된 것과 같은 것을 볼 수있을 것이다.을

을 추천하지 않습니다 예를 들어, Application#createValueBinding() 다음과 같은 언급하고있다. 이것은 getExpressionFactory() 다음에 ExpressionFactory.createValueExpression(javax.el.ELContext, java.lang.String, java.lang.Class)으로 바뀌 었습니다.

동적 this article이 방법으로 데이터 테이블을 채우는 몇 ​​가지 구체적인 예를 찾을 수 있습니다.

타사 구성 요소 라이브러리의 경우 RichFaces는이 목적으로 정확하게 설계된 rich:columns 구성 요소가 있습니다.

0

타사 라이브러리 PrimeFaces에는 데이터 소스에서 동적으로 열을 생성하기위한 p:columns 구성 요소가 있습니다.

관련 문제