2011-10-20 15 views
1

JSF 2.0でWebアプリケーションを開発しています。私のアプリケーションでは、プレゼンスを表示するためのテーブルが必要です。java.util.Mapから動的テーブルを作成

私は 'PresenceService' BeanにMap<Date, List<Presence>>を持っています。

Presenceオブジェクトには、Personオブジェクト(名前と姓)とブール値の有無が存在します。

私はこのようになりますテーブルを作成したいと思います:

私は、このようなテーブルを作成するために使用することができJSFコンポーネント
    monday  tuesday  wednesday ... 
Name Person 1 present not present present  ... 
Name Person 2 present present  present  ... 
...    ...  ...   ...   ... 

?それともマップを使ってはいけないのですか?私は<ui:repeat>のテーブルを自分で作成しようとしましたが、失敗しました。 ユーザーが期間と人の範囲を選択できるので、列としての列は動的である可能性があります。

EDIT:溶液(Balus Cに答える参照)

これは魔法のように動作:

 <table> 
      <tr> 
       <th>Name</th> 
      <ui:repeat value="#{aanwezigheidController.siAanwezigheidService.datums}" var="datumHeader"> 
       <th> 
       <h:outputText value="#{datumHeader}"> 
        <f:convertDateTime pattern="dd/MM/yyyy" /> 
       </h:outputText> 
       </th> 
      </ui:repeat> 
      </tr> 
      <ui:repeat value="#{aanwezigheidController.siAanwezigheidService.aanwezigheidSiRijen}" var="aanwRij"> 
       <tr> 
        <td>#{aanwRij.persoon.naam} #{aanwRij.persoon.voornaam}</td> 

       <ui:repeat value="#{aanwezigheidController.siAanwezigheidService.datums}" var="datumCell"> 
        <td> 
        <h:outputText value="aanwezig" rendered="#{aanwRij.aanwezighedenMap[datumCell].aanwezig}" /> 
        <h:outputText value="afwezig" rendered="#{!aanwRij.aanwezighedenMap[datumCell].aanwezig}" /> 
        </td> 
       </ui:repeat> 

       </tr> 
      </ui:repeat> 
     </table> 

答えて

2

ダブルネストされた<ui:repeat>は問題ないはずです。標準的なJSF実装では、動的列を表すために<h:columns>のようなものは用意されていませんが、コンポーネントライブラリRichFacesおよびPrimeFacesのそれぞれは<rich:columns><p:columns>です。あなたはそれを見てみたいかもしれません。

単独ではMap<Date, List<Presence>>を使用すると、特定の人物を選んですべての列の行データを表示することはできません。 Map<Date, Map<Person, List<Presence>>、または動的列を表す別のList<Date>と別のList<Presence>が必要です。具体的にはにはPersonMap<Date, Boolean>のプロパティがあり、列の特定の日付を選択できます。

+0

私は第2の選択肢に行くと思います。私は準備ができたら知らせます。本当にありがとう、私は本当に立ち往生した。 – Bart1990

関連する問題