我在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 with rich:columns和rich:column生成正确的格式,但这只是显示 - 我需要能够编辑到位的行。
我正在使用HtmlDataTable在backing bean中生成表,但是Seam在JSF绑定方面效果不佳。
对我来说,最难以理解的是将垂直数据(具有相关事件信息的员工,每个事件占一行)水平(员工事件事件事件)。
有人对有效处理此问题的最佳方法有任何建议或建议吗?
我会发布我尝试过的内容,但这已经很久了,所以我会根据需要添加更多内容。
答案 0 :(得分:0)
我最终做的是使用组件组合来完成这项工作。 我创建了一个将员工数据行转换为一行的对象。所以来自db的数据返回: Jones certtype1 start end
Jones certtype2 start end
Jones certtype3 start end
变为:
Jones 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>