2013-05-03 3 views
2

필자는 다양한 수의 패널을 삽입하여 3D DataTable을 기본적으로 생성하는 2D DataTable을 보유하고 있습니다. 2D Table LLPrimeFaces 3 차원 DataTable

<p:dataTable var="rowName" value="#{tableBean.rowNames}"> 
    <p:column headerText="" styleClass="ui-widget-header"> 
     <h:outputText value="#{rowName}"/> 
    </p:column> 

    <p:columns var="columnName" value="#{tableBean.colNames}" headerText="#{columnName}"> 
     <p:panel> 
     <h:outputText value="panel"/> 
     </p:panel> 
    </p:columns> 
</p:dataTable> 

그리고 자바 : 다음과 같이

2 차원 테이블 보이는

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import java.util.ArrayList; 
import java.util.List; 

@ManagedBean 
@RequestScoped 
public class TableBean { 
    private List<String> rowNames = new ArrayList<String>(); 
    private List<String> colNames = new ArrayList<String>(); 
    private ArrayList<ArrayList<ArrayList<String>>> data3D = new ArrayList<ArrayList<ArrayList<String>>>(); 

    public TableBean() { 
     rowNames.add("row1"); 
     rowNames.add("row2"); 

     colNames.add("col1"); 
     colNames.add("col2"); 
     colNames.add("col3"); 

     // Setup 3 dimensional structure 
     for (int i = 0; i < rowNames.size(); i++) { 
      data3D.add(new ArrayList<ArrayList<String>>()); 
      for (int j = 0; j < colNames.size(); j++) { 
       data3D.get(i).add(new ArrayList<String>()); 
      } 
     } 

     // row 1, col 1, 3 items 
     data3D.get(0).get(0).add("item1"); 
     data3D.get(0).get(0).add("item2"); 
     data3D.get(0).get(0).add("item3"); 

     // row 1, col 2, 1 items 
     data3D.get(0).get(1).add("item1"); 

     // row 1, col 3, 2 items 
     data3D.get(0).get(2).add("item1"); 
     data3D.get(0).get(2).add("item2"); 

     // row 2, col 1, 2 item 
     data3D.get(1).get(0).add("item1"); 
     data3D.get(1).get(0).add("item2"); 

     // row 2, col 2, 1 item 
     data3D.get(1).get(1).add("item1"); 
    } 

    public List<String> getRowNames() { return rowNames; } 
    public void setRowNames(List<String> rowNames) { this.rowNames = rowNames; } 

    public List<String> getColNames() { return colNames; } 
    public void setColNames(List<String> colNames) { this.colNames = colNames; } 

    public ArrayList<ArrayList<ArrayList<String>>> getData3D() { return data3D; } 
    public void setData3D(ArrayList<ArrayList<ArrayList<String>>> data3D) { this.data3D = data3D; } 
} 

하지만 난 다음, 여기서 P1, P2, P3 등이 달성하고자하는 PrimeFaces 패널 :

+------+--------+--------+--------+-- 
|  | Col1 | Col2 | Col3 | .... .... .... .... 
+------+--------+--------+--------+-- 
|  | +----+ | +----+ | +----+ | 
|  | | p1 | | | p1 | | | p1 | | 
|  | +----+ | +----+ | +----+ | 
| Row1 | | p2 | |  | | p2 | | 
|  | +----+ |  | +----+ | 
|  | | p3 | |  |  | 
|  | +----+ |  |  | 
+------+--------+--------+--------+ 
|  | +----+ | +----+ |  | 
|  | | p1 | | | p1 | |  | 
| Row2 | +----+ | +----+ |  | 
|  | | p2 | |  |  | 
|  | +----+ |  |  | 
+------+--------+--------+--------+ 
| .... | 
| .... | 
    .... 

3 차원 (문자열 목록)을 사용하여 DataTable의 각 셀 내에서 각 문자열에 대한 패널을 만들 수 있습니까?

+0

각 셀마다 많은 패널을 만들 수 있습니까? –

+0

네, 그게 제가 성취하려는 것입니다. – ChrisM

+2

각 셀에서

답변

4

RongNK의 해결책은 ui : repeat를 사용하는 것입니다.

중괄호 표기 [][]을 사용하면 3 차원에서 배열을 지정할 수 있습니다. 행 및 열의 인덱스는 각각 rowIndexVarcolIndexVar 속성 (<p:dataTable><p:columns>)에서 액세스 할 수 있습니다.

<p:dataTable var="rowName" value="#{tableBean.rowNames}" rowIndexVar="rowIdx"> 
    <p:column headerText="" styleClass="ui-widget-header"> 
     <h:outputText value="#{rowName}"/> 
    </p:column> 

    <p:columns var="columnName" value="#{tableBean.colNames}" headerText="#{columnName}" 
       columnIndexVar="colIdx"> 
     <ui:repeat value="#{tableBean.data3D[rowIdx][colIdx]}" var="data"> 
      <p:panel> 
       <h:outputText value="#{data}"/> 
      </p:panel> 
     </ui:repeat> 
    </p:columns> 
</p:dataTable> 
+0

자기 희석제. 잘 했어 ! –