ui:重复不在h:dataTable中工作

时间:2014-04-24 22:54:53

标签: jsf datatable uirepeat

ui:repeat标记中的h:dataTable存在问题。我有一个集合,其中包含字段的名称和另一个带有数据的字段。所以我通过索引匹配它们。加载页面时,抛出异常OutOfBoundsException。但是当我将filingCabinetManagerBean.filingCabinet.schema.fields.indexOf(schemaField)放在ui:repeat之外时,它会显示正确的索引。所以我试图将它拆分并声明ui:paramc:set作为变量但同样的问题。 realCard的cardData属性不为空,也不为空,它有7个项目,我已经调试过了。所以你知道可能出现什么问题吗?

PS:当我为ui:repeat更改h:dataTable时,它正在运行。最重要的是,在另一个JSF页面上使用相同的构造并且它正在工作,只有一个区别 - 我从卡中得到cardData,在一个外部dataTable中引用,所以它不是Bean(dot)属性等,但只有variable(dot)等。

有什么想法吗?谢谢您的帮助。 :)

<p:panel header="#{fileUploadBean.actualCard.id}">

        <h:dataTable value="#{filingCabinetManagerBean.filingCabinet.schema.fields}" var="schemaField" style="vertical-align: top">

            <h:column><h:outputText value="#{schemaField.fieldTitle}:" style="font-size: 20px;font-weight: bold"/></h:column>
            <h:column>
                <ul>
                    <ui:repeat value="#{fileUploadBean.actualCard.cardData.get(filingCabinetManagerBean.filingCabinet.schema.fields.indexOf(schemaField)).data}" var="data">
                        <li><h:outputText value="#{data.string}"/></li>
                    </ui:repeat>
                </ul>     
            </h:column>
        </h:dataTable>

1 个答案:

答案 0 :(得分:0)

<ui:repeat><h:dataTable>内无效,因为value的{​​{1}}是使用<ui:repeat> var检索的}。

由于一个不明原因,<h:dataTable>最后一次使用<h:dataTable>值正确迭代列表的所有对象。最后一次迭代会破坏null

解决方案是在获取<ui:repeat>的{​​{1}}时处理此问题。例如,如果你有类似的东西:

value

在控制器中:

ui:repeat

然后您需要将其替换为:

<h:dataTable value="#{someBean.parentObjList}" var="obj">
  <h:column>
    <ui:repeat value="#{someBean.getChildren(obj)" var="child" >
       ...
    </ui:repeat>
  </h:column>
</h:dataTable>