forEach可以迭代访问数组或集合数据,一般用来辅助生成可迭代数据(数组或列表)的表现界面。ForEach构件的迭代规则为:从"first"开始计数,每次计数值加"step",直到计数值大于或等于"rows"时迭代停止。在默认情况下,"first"值为0,"step"值为1,"rows"值为数组或集合数据的长度。
表 30.68. 构件信息
| Component Type | org.operamasks.faces.component.widget.invisible.ForEach |
| Component Family | org.operamasks.faces.widget.Invisible |
| Component Class | org.operamasks.faces.component.widget.invisible.ForEach |
| Tag Class | org.operamasks.faces.webapp.widget.ForEachTag |
| Renderer Type | org.operamasks.faces.component.widget.invisible.ForEach |
| Renderer Class(HTML_BASIC) | org.operamasks.faces.render.widget.ajax.AjaxForEachRenderer |
+java.lang.Object
++javax.faces.component.UIComponent
+++javax.faces.component.UIComponentBase
++++javax.faces.component.UIData
+++++org.operamasks.faces.component.widget.invisible.base.ForEachBase
++++++org.operamasks.faces.component.widget.invisible.ForEach
表 30.69. 属性
| binding | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | javax.el.ValueExpression(javax.faces.component.UIComponent) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个值表达式,用于把该组件链接到一个ManagedBean的某个属性。 | ||||
| first | 定义类 | javax.faces.component.UIData | ||
| 类型 | javax.el.ValueExpression(int) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 指定显示的数据从哪一行开始 | ||||
| id | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | java.lang.String | |||
| 是否必须 | 否 | 延时求值 | 否 | |
| 这个组件的组件标识符。这个值在最近的命名容器类型的父组件范围内,必须是唯一的。 | ||||
| indexVar | 定义类 | org.operamasks.faces.component.widget.invisible.ForEach | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| Request范围的变量,存放当前迭代访问到的数据在数组或集合中的序号 | ||||
| rendered | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | boolean(boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个标志,指出该组件是否要在任何随后的form提交过程中被渲染或处理。 这个属性的缺省值是true。 | ||||
| rows | 定义类 | javax.faces.component.UIData | ||
| 类型 | javax.el.ValueExpression(int) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 需要显示的行的数目 | ||||
| step | 定义类 | org.operamasks.faces.component.widget.invisible.ForEach | ||
| 类型 | javax.el.ValueExpression(java.lang.Integer) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 每次迭代时计数值的增量 | ||||
| value | 定义类 | javax.faces.component.UIData | ||
| 类型 | java.lang.String | |||
| 是否必须 | 否 | 延时求值 | 否 | |
| 构件的当前值 | ||||
| var | 定义类 | javax.faces.component.UIData | ||
| 类型 | java.lang.String(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 代表每一行数据的变量 | ||||
<table border="2" width="80%" align="center">
<w:forEach id="view-example" value="#{ProductBean.products}" indexVar="ind" var="p">
<f:verbatim rendered="#{ind % 2 == 0}">
<tr>
</f:verbatim>
<f:verbatim>
<td width="50%">
</f:verbatim>
<h:panelGrid columns="2">
<h:graphicImage alt="#{p.title}" url="#{p.image}"/>
<h:panelGrid columns="1">
<h:outputText value="#{p.title}" styleClass="title"/>
</span>
<span>List Price: </span>
<h:outputText value="#{p.listPrice}" styleClass="listPrice"/>
<span>Your Price: </span>
<h:outputText value="#{p.yourPrice}" styleClass="yourPrice"/>
</h:panelGrid>
</h:panelGrid>
<f:verbatim>
</td>
</f:verbatim>
<f:verbatim rendered="#{ind % 2 == 1}">
</tr>
</f:verbatim>
</w:forEach>
</table>上面代码遍历#{ProductBean.products}数组数据,通过设置"indexVar"和"var",指定了保存迭代数据序号和迭代数据的变量名,在迭代的内循环中通过设置的变量名访问数据,将数据以两列的方式显示在一个table中。