0

我想使用rich:dataTable.

我正在获取表格,但我看不到如何访问列表 (listTitre),女巫在行中包含一个列表 (listeComplements) 以显示数据。

例子:

listeSaisieCmpltsModel.listeComplements包含

  1. A栏
  2. B栏
  3. C栏

row.listeComplements包含

  1. B列数据
  2. C列数据

结果

  • 参考滴度 | 一个 | 乙| C
  • xxxxxxxxx | | 乙| C

我使用下面的代码:

<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;
    }
}
4

1 回答 1

0

如果您的内容是相同的顺序示例:

listeSaisieCmpltsModel.listeComplements包含

  1. A栏
  2. B栏
  3. C列等

row.listeComplements包含

  1. A列数据
  2. B列数据
  3. C列数据等

您可以使用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}" />
于 2013-05-28T08:06:48.703 回答