2017-10-30 5 views
2

各項目(Apple、Banana)ごとに動的なテスト(測定)があり、すべてのテストに2つのプロパティ(必須、表示)があります。私が必要とするのは、これらのテストを列(colspan = 2)とそのプロパティ(colspan = 1)(以下の例を参照)として示す表です。私はテーブルのヘッダー(Primefacesのp:columnGroupを使用して)を行うことはできますが、プロパティリストを反復処理している間は、各Propertyに対して2つの列をどのように満たすかわかりません。動的列を使用したDatatable、オブジェクトごとの複数の列

example

私が持っている唯一のアイデアは、すべての項目がそれを反復処理し、正しいプロパティを選択するために、いくつかの剰余条件を使用し、二回(直径、直径、長さ、長さ)が存在する新しいリストを作ることです。

XHTML

<p:dataTable var="scenario"> 
    ... 
    <p:columns var="property" value="#{view.getXTimesProperties()}" 
         columnIndexVar="index"> 
     <c:set var="test" value="#{view.getTest(scenario, property)}"/> 
     <c:choose> 
      <c:when test="${index % 2 == 0}"> 
       <h:outputText value="#{test.mandatory}"/> 
      </c:when> 
      <c:when test="${index % 2 == 1}"> 
       <h:outputText value="#{test.visible}"/> 
      </c:when> 
     </c:choose> 
    </p:columns> 
</p:dataTable> 

と表示方法が

public List<Property> getXTimesProperties() { 
    List<Property> list = new ArrayList<>(properties.size() * 2); 
    for (Property property : properties) { 
     list.add(property); 
     list.add(property); 
    } 
    return list; 
} 

より良い方法はあります:

私の現在のソリューションはありますか?より良いアイデアのために事前に感謝!

+1

coumnsあなたは 'Cを使用することができます(例えば、AJAXを経由して)動的に変更しない場合。各テストでループし、2つの 'coloumn'を作成します – Kukeltje

+0

その提案をありがとうございます!私はp:カラムに集中しすぎていました。これは私にとって完璧です。 –

答えて

0

はい、良い方法(Kukeltjeにクレジット):列の数を作成するためにforeach`:

<p:dataTable var="scenario"> 
    ... 
    <c:forEach var="property" items="#{view.properties}"> 
     <c:set var="test" value="#{view.getTest(scenario, property)}"/> 
     <p:column> 
       <h:outputText value="#{test.mandatory}"/> 
     </p:column>  
     <p:column> 
       <h:outputText value="#{test.visible}"/> 
     </p:column> 
    </c:forEach> 
</p:dataTable> 
関連する問題