0

我在 JBoss 5 上部署了一个 Seam 2.2 JSF 1.2 应用程序。我需要创建一个包含复杂、可编辑数据表的页面;数据显示在横向和向下。

我有一个员工:

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 绑定配合使用。

对我来说,最难理解的是使垂直数据(具有相关事件信息的员工,每个事件一行)水平(员工事件事件)。

有人对有效处理此问题的最佳方法有任何建议或建议吗?

我会发布我尝试过的内容,但这已经很长了,所以我会根据需要添加更多内容。

4

1 回答 1

0

我最终做的是使用组件的组合来完成这项工作。我创建了一个将员工数据行转换为一行的对象。所以从数据库返回的数据:Jones certtype1 start end

琼斯 certtype2 开始结束

琼斯 certtype3 开始结束

变成:

琼斯 certtype1(开始,结束) certtype2(开始,结束) certtype3(开始,结束)

并像这样组织它:

 <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 回答