ADF11g-015:ADF中af:forEach和af:iterator标签的区别

来源:互联网 发布:看电影用什么软件 编辑:程序博客网 时间:2024/05/21 08:36

1. <af:forEach>

<af:forEach>标签实际上从JSTL标签中的<c:forEach>标签演变过来的,是c:forEach标签的替代品,很多情况下还不支持“varStatus

<af:forEach>不支持所有的java.util.Collections;仅仅支持 java.util.Lists或数组,当试图使用<af:forEach>标签来遍历CollectionModel时会报如下错误:

javax.servlet.jsp.JspException: "items" 必须指向列表或数组

<af:forEach>的主要作用不是在JSF页面中迭代的,而是被用来生成多个组件。如果你的目的是遍历一个集合对象,那么应该使用<af:iterator>。

一些使用<af:forEach>而不是<af:iterator>的情况:

  •    当需要用到<c:if>, <c:choose>, <c:when> and <c:otherwise> 做一些判断来决定生成UI组件时;
  •    在循环过程中每行可能需要include不同的 jsp页面,使用不同的page template或者不同的declarative component;
  •    当在一些Trinidad标签中不支持使用<af:iterator>作为子标签,而在Rich Component中,这个问题基本上不存在。

2.<af:iterator>

<af:iterator> 指定可以遍历的class是oracle.adf.view.rich.model.CollectionModel; 当然你还可以使用java.util.List , array, and javax.faces.model.DataModel. 事实上在运行的时候,这些都将被自动转换为CollectionModel


Reference

http://jdevadf.oracle.com/adf-richclient-demo/docs/tagdoc/af_forEach.html

http://jdevadf.oracle.com/adf-richclient-demo/docs/tagdoc/af_iterator.html