Jsf ui:重复不在h:dataTable内工作
我对Jsf ui:重复不在h:dataTable内工作,jsf,datatable,uirepeat,Jsf,Datatable,Uirepeat,我对h:dataTable标记中的ui:repeat有问题。我有一个包含字段名称的集合,另一个包含数据。所以我用索引匹配它们。当我加载页面时,抛出异常OutOfBoundsException。但当我将filingCabinetManagerBean.filingCabinet.schema.fields.indexOf(schemaField)放在ui:repeat之外时,它会显示正确的索引。所以我尝试将其拆分,并将ui:param和c:set声明为变量,但问题相同cardDataactualC
h:dataTable
标记中的ui:repeat
有问题。我有一个包含字段名称的集合,另一个包含数据。所以我用索引匹配它们。当我加载页面时,抛出异常OutOfBoundsException
。但当我将filingCabinetManagerBean.filingCabinet.schema.fields.indexOf(schemaField)
放在ui:repeat
之外时,它会显示正确的索引。所以我尝试将其拆分,并将ui:param
和c:set
声明为变量,但问题相同cardData
actualCard的属性不为null,也不为空,其中有7项,我已经调试过了。那么你知道问题出在哪里吗
PS:当我为h:dataTable
更改ui:repeat
时,它正在工作。最棒的是,在另一个JSF页面上使用了相同的结构,它正在工作,只有一个区别——我从一个外部数据表中引用的卡片中获得cardData
,因此它不是Bean(dot)
属性等等,而是变量(dot)
等等
有什么想法吗?谢谢你的帮助。:)
由于使用
的变量检索
的值,所以
在
内部不起作用
由于不清楚的原因,
最后一次使用null
值在列表的所有对象上正确迭代一次。最后一次迭代会破坏
解决方案是在获取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>
...
在控制器中:
public List<ChildObj> getChildren(ParentObj obj) {
return parentObjService.findAllFor(obj);
}
public List getChildren(ParentObj obj){
返回parentObjService.findAllFor(obj);
}
然后,您需要将其替换为:
public List<ChildObj> getChildren(ParentObj obj) {
if (obj == null)
return new ArrayList<ChildObj>(); // return empty ArrayList to avoid crashing
else
return parentObjService.findAllFor(obj);
}
public List getChildren(ParentObj obj){
if(obj==null)
返回新的ArrayList();//返回空的ArrayList以避免崩溃
其他的
返回parentObjService.findAllFor(obj);
}
哪个JSF impl/版本?最近试过吗?Mojarra中有很多bug,其中大部分应该已经通过当前最新的2.2.12消除。当前的答案只显示了一个解决方案,而不是一个解决方案。尽管如此,在getter中执行业务逻辑是一个坏主意。您最好重新编写控制器,以便准确地预填充视图所期望的模型,而不是让视图通过getter填充模型(这显然是低效的)。另见a.o。
public List<ChildObj> getChildren(ParentObj obj) {
if (obj == null)
return new ArrayList<ChildObj>(); // return empty ArrayList to avoid crashing
else
return parentObjService.findAllFor(obj);
}