ui:repeat
标记中的h:dataTable
存在问题。我有一个集合,其中包含字段的名称和另一个带有数据的字段。所以我通过索引匹配它们。加载页面时,抛出异常OutOfBoundsException
。但是当我将filingCabinetManagerBean.filingCabinet.schema.fields.indexOf(schemaField)
放在ui:repeat
之外时,它会显示正确的索引。所以我试图将它拆分并声明ui:param
和c: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>
答案 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>