0

Seam 2.2JSF1.2アプリケーションをJBoss5にデプロイしています。複雑で編集可能なデータテーブルを使用してページを作成する必要があります。データは下だけでなく横にも表示されます。

私には従業員がいます:

Employee {
    int id;
    String name;
    ...
}

私は認証タイプを持っています:

Certs {
    int id;
    String certType;
    ...
)

従業員が開催するタイプCertsのイベントがあります。

Events {
    int id;
    int employeeId;
    int certId;
    Date start;
    Date end;
    ...
}  

複数の証明書タイプが選択され、従業員がその証明書タイプのイベントを持っていない場合、動的に生成された証明書タイプ(ユーザーが選択するまで証明書列の数は不明)でデータを表示する必要があります。その証明書タイプのセルは空になります。

有効なXHTML

rich:datatableとrich:columnsおよびrich:columnを使用して正しい形式を生成できますが、それは表示のみです。行を所定の位置で編集できる必要があります。

HtmlDataTableを使用してバッキングBeanでテーブルを生成する作業を行っていますが、SeamはJSFバインディングではうまく機能しません。

頭を悩ませるのが最も難しいのは、垂直方向のデータ(関連するイベント情報を持つ従業員、イベントごとに1行)を水平方向(従業員のイベントイベントイベント)にすることです。

これに効率的に取り組むための最良の方法について誰かが何かアドバイスやアドバイスがありますか?

試したことを投稿しますが、もうかなり長いので、必要に応じて追加します。

4

1 に答える 1

0

What I ended up doing was using a combination of components to make this work. I created an object that converts rows of employee data into one row. So data from the db that returns: Jones certtype1 start end

Jones certtype2 start end

Jones certtype3 start end

Becomes:

Jones certtype1(start, end) certtype2(start, end) certtype3(start, end)

And organized it like:

 <rich:dataTable id="acadCertList"
value="#{myCertBean.employeeCertEventObjects}"
var="_certs" rowKeyVar="row" >

  <f:facet name="header">

<rich:columnGroup>
    <rich:column>
        <h:outputText value="Row" />
    </rich:column>
    <rich:column>
    <h:outputText value="Name" />
    </rich:column>

  <!-- dynamically create the certType1, certType2 …  column headers -->
    <rich:columns value="#{myCertBean.selectedCertTypeList}"
            var="_selCrtType" colspan="2">
        <h:outputText value="#{_selCrtType.certType}" />
    </rich:columns>
</rich:columnGroup>
 </f:facet>

 <rich:subTable value="#{_certs}" var="_cEmpObj">
<f:facet name="header">
  <!-- repeat start end column headers for each certType -->

    <rich:columnGroup>
        <rich:column>
 </rich:column>
        <rich:column>
        </rich:column>
        <c:forEach items="#{myCertBean.selectedCertTypeList}">
 <rich:column>
                <h:outputText value="Start" />
            </rich:column>
 <rich:column 
                <h:outputText value="End" />
            </rich:column>
 </c:forEach>
    </rich:columnGroup>
</f:facet>
 <!-- load data for each row -->

<rich:column id="row_#{row}">
    <h:outputText value="#{row+1}" />
</rich:column>
<rich:column id="name_#{row}">
    <h:outputText value="#{_cEmpObj.name}/>
</rich:column>

<c:forEach items="#{myCertBean.selectedCertTypeList}" varStatus="status">
    <rich:column id="curexp_#{status.index}" 
        <h:outputText
 value="#{_cEmpObj.certEventsByCertTypeSysid[status.index].startDate}" />
    </rich:column>
    <rich:column id="curexp_#{status.index}" 
        <h:outputText
 value="#{_cEmpObj.certEventsByCertTypeSysid[status.index].endDate}" />
    </rich:column>
 </c:forEach> 

 </rich:subTable>

 </rich:dataTable>
于 2013-04-16T14:46:12.283 に答える