5

動的な列数が必要です。Richfaces<rich:columns>は richfaces 3.3.3-final でそれを提供しますが、Richfaces 4 については を推奨しているようです<c:forEach>

c:forEach

正しく動作させることができません。データテーブルの var に依存できないため<c:forEach>、列の正しいリストをフィードする方法がわかりません。(各行には独自の値がありますが、ヘッダーは同じです)

基本的に、表示したいデータは x サイズの行のリストで、各行には y サイズの列値のリストがあります。しかし<c:forEach>、正しい列をフィードできるように、バッキング Bean にそれがどの行にあるかをどのように伝えることができますか?

ui/a4j:繰り返し

固定列やその他の多くの機能が必要なため、車輪の再発明はしたくありません。この方法でテーブル html を作成し、他の機能に jQuery を使用することが検討されています。ただし、これを維持することは絶望的であり、多くの作業が必要です。

また、子を動的に作成するバッキング Bean から構築することも検討しましたが、まったく好きではありません。これは最後の手段でなければなりません。

使用: Tomcat 7、サーブレット 3.0、JSF 2.1x - Mojarra、Richfaces 4.x

アップデート

よし、やっと結果が出てきた。しかし、私のヘッダーは表示されません。値は完全に表示されますが、ヘッダーは表示されません。おそらく反復または何かでそれらを行う際の問題はありますか?

    <rich:dataTable value="#{controller.rows}"
        var="row">
        <c:forEach items="#{controller.columns}" var="column">
            <rd:column id="name" width="250">
                <f:facet name="header">
                    <h:outputText value="#{row.myArrayList[column].header}" />
                </f:facet>
                <h:inputText value="#{row.myArrayList[column].value}"  disabled="#{row.myArrayList[column].open}"/>
            </rd:column>
        </c:forEach>
    </rich:dataTable>
4

1 に答える 1

7

あなた<c:forEach>が得ることができるものは確かに最高です。コンポーネントが実際には子ではなく子を必要としている間、ビューの<ui/a4j:repeat>レンダリング時に実行されるため、 は機能しません。UIDataUIColumnUIRepeat

を機能させるには<c:forEach>、すべてのプロパティ名のリスト/マップを提供する必要があります (マップの場合は、ヘッダー ラベルも)。Itemこれは、が propertiesを持ちid、正確にそれらのプロパティ名を持つを返すnameと仮定した具体的なキックオフの例です。value#{bean.itemPropertyNames}List<String>

<rich:dataTable value="#{bean.items}" var="item">
    <c:forEach items="#{bean.itemPropertyNames}" var="itemPropertyName">
        <rich:column>
            #{item[itemPropertyName]}
        </rich:column> 
    </c:forEach>
</rich:dataTable>

列ヘッダーも表示する必要がある場合はMap<String, String>、キーがプロパティ名を表し、値がヘッダー値を表す場所を用意するのが最善です。

<rich:dataTable value="#{bean.items}" var="item">
    <c:forEach items="#{bean.itemProperties}" var="itemProperty">
        <rich:column>
            <f:facet name="header">#{itemProperty.value}</f:facet>
            #{item[itemProperty.key]}
        </rich:column> 
    </c:forEach>
</rich:dataTable>

いずれにせよ、唯一の欠点は、このコンストラクト内の#{bean}of<c:forEach items>をビュー スコープにすることができないことです。部分的な状態の保存をオフにしない限り、リクエストごとに再作成されます。リクエストスコープのもの(またはセッションまたはアプリケーション)である必要があります。必ずしも の Bean と同じ Bean である必要はないことに注意してください<rich:dataTable value>

以下も参照してください。

于 2012-12-12T12:12:48.853 に答える