【问题标题】:Editable datatable with dynamic columns具有动态列的可编辑数据表
【发布时间】:2013-02-23 14:11:55
【问题描述】:

我在 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;
    ...
}  

我需要通过动态生成的证书类型显示数据(证书列的数量在用户选择它们之前是未知的),如果选择了多个证书类型并且员工没有该证书类型的事件,则该单元格证书类型应为空。

我可以使用rich:datatable 和rich:columns 和rich:column 生成正确的格式,但这只是显示 - 我需要能够就地编辑行。

我正在使用 HtmlDataTable 在支持 bean 中生成表,但是 Seam 不能很好地与 JSF 绑定配合使用。

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

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

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

【问题讨论】:

    标签: java richfaces seam jboss5.x jsf-1.2


    【解决方案1】:

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

    琼斯 certtype2 开始结束

    琼斯 certtype3 开始结束

    变成:

    琼斯 certtype1(start, end) certtype2(start, end) certtype3(start, end)

    并像这样组织它:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-04
      • 2017-12-11
      • 2015-07-28
      • 2011-10-10
      • 2020-05-29
      • 2015-03-24
      • 1970-01-01
      相关资源
      最近更新 更多