我想使用rich:dataTable
显示表格。
我正在获取该表,但我看不到如何访问列表(listTitre),其中包含行中的列表(listeComplements)以显示数据。
例如:
listeSaisieCmpltsModel.listeComplements
包含
row.listeComplements
包含
结果
我使用下面的代码:
<rich:dataTable id="idList" value="#{listeSaisieCmpltsModel.listTitre}" var="row">
<rich:column id="name">
<f:facet name="header">Ref Titre</f:facet>
<h:outputText value="#{row.refTitre}" />
</rich:column>
<c:forEach items="#{listeSaisieCmpltsModel.listeComplements}" var="column">
<rich:column>
<f:facet name="header">
<h:outputText value="#{column.libelleCoplement}" />
</f:facet>
<h:inputText value="#{row.libelleCoplement.valeur}" />
</rich:column>
</c:forEach>
</rich:dataTable>
模特:
@ManagedBean(name="listeSaisieCmpltsModel")
@SessionScoped
public class ListeSaisieCmpltsModel implements Serializable {
private static final long serialVersionUID = 1L;
private List<TitresRechercherComplementsSortieDTO> listTitre;
private List<ComplementsTitresSortieDTO> listeComplements;
public List<TitresRechercherComplementsSortieDTO> getListTitre() {
return listTitre;
}
public void setListTitre(List<TitresRechercherComplementsSortieDTO> listTitre) {
this.listTitre = listTitre;
}
public List<ComplementsTitresSortieDTO> getListeComplements() {
return listeComplements;
}
public void setListeComplements(
List<ComplementsTitresSortieDTO> listeComplements) {
this.listeComplements = listeComplements;
}
}
DTO:
public class TitresRechercherComplementsSortieDTO {
@XmlElement(type = String.class)
@XmlJavaTypeAdapter(Adapter1 .class)
@XmlSchemaType(name = "dateTime")
protected Date datePec;
@XmlElement(nillable = true)
protected List<ComplementsTitresSortieDTO> listeComplements;
protected String origineTitre;
protected String refTitre;
public Date getDatePec() {
return datePec;
}
public void setDatePec(Date value) {
this.datePec = value;
}
public List<ComplementsTitresSortieDTO> getListeComplements() {
if (listeComplements == null) {
listeComplements = new ArrayList<ComplementsTitresSortieDTO>();
}
return this.listeComplements;
}
public String getOrigineTitre() {
return origineTitre;
}
public void setOrigineTitre(String value) {
this.origineTitre = value;
}
public String getRefTitre() {
return refTitre;
}
public void setRefTitre(String value) {
this.refTitre = value;
}
}
答案 0 :(得分:0)
如果您的内容采用相同的订单示例:
listeSaisieCmpltsModel.listeComplements
包含
row.listeComplements
包含
您可以使用c:forEach
varStatus
:
查看:
<rich:dataTable id="idList" value="#{listeSaisieCmpltsModel.listTitre}" var="row">
<rich:column id="name">
<f:facet name="header">Ref Titre</f:facet>
<h:outputText value="#{row.refTitre}" />
</rich:column>
<c:forEach items="#{listeSaisieCmpltsModel.listeComplements}" var="column" varStatus="status">
<rich:column>
<f:facet name="header">
<h:outputText value="#{column.libelleCoplement}" />
</f:facet>
<h:inputText value="#{row.listeComplements[status.index].valeur}" />
</rich:column>
</c:forEach>
</rich:dataTable>
我确实不确定你TitresRechercherComplementsSortieDTO
#{row.listeComplements[status.index].valeur}
内的确切列表获取者。
另一个选项是修改DTO以添加一个方法,该方法将返回右列的正确数据,如下所示:
查看:
<rich:dataTable id="idList" value="#{listeSaisieCmpltsModel.listTitre}" var="row">
<rich:column id="name">
<f:facet name="header">Ref Titre</f:facet>
<h:outputText value="#{row.refTitre}" />
</rich:column>
<c:forEach items="#{listeSaisieCmpltsModel.listeComplements}" var="column" varStatus="status">
<rich:column>
<f:facet name="header">
<h:outputText value="#{column.libelleCoplement}" />
</f:facet>
<h:inputText value="#{row.getColumnData(column).valeur}" />
</rich:column>
</c:forEach>
</rich:dataTable>
DTO:
public class TitresRechercherComplementsSortieDTO
{
protected List<ComplementsTitresSortieDTO> listeComplements;
public ComplementsTitresSortieDTO getColumnData(ComplementsTitresSortieDTO column)
{
ComplementsTitresSortieDTO data;
for(ComplementsTitresSortieDTO dto : getListeComplements())
{
if(dto.getCodeComplement() == column.getCodeComplement())
{
data = dto;
break;
}
}
return data;
}
}
编辑:
由于无法修改DTO,因此必须将该函数移动到bean,如下所示:
public class ListeSaisieCmpltsModel
{
public ComplementsTitresSortieDTO getColumnData(TitresRechercherComplementsSortieDTO dtoInput, ComplementsTitresSortieDTO column)
{
ComplementsTitresSortieDTO data = null;
for(ComplementsTitresSortieDTO dto : dtoInput.getListeComplements())
{
if(dto.getCodeComplement() == column.getCodeComplement())
{
data = dto;
break;
}
}
return data;
}
}
在视图中:
<h:inputText value="#{listeSaisieCmpltsModel.getColumnData(row,column).valeur}" />