如何使用dynamic rich:column加载rich:dataTable行数据

时间:2013-05-28 07:56:25

标签: jsf richfaces

我想使用rich:dataTable显示表格。

我正在获取该表,但我看不到如何访问列表(listTitre),其中包含行中的列表(listeComplements)以显示数据。

例如:

listeSaisieCmpltsModel.listeComplements包含

  1. A栏
  2. B栏
  3. C栏
  4. row.listeComplements包含

    1. B栏数据
    2. C列数据
    3. 结果

      • Ref Titre | A | B | ç
      • xxxxxxxxx | | B | ç

      我使用下面的代码:

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

1 个答案:

答案 0 :(得分:0)

如果您的内容采用相同的订单示例:

listeSaisieCmpltsModel.listeComplements包含

  1. A栏
  2. B栏
  3. C栏 等
  4. row.listeComplements包含

    1. A列数据
    2. B栏数据
    3. C列数据 等
    4. 您可以使用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}" />