30.24. <w:forEach>

forEach可以迭代访问数组或集合数据,一般用来辅助生成可迭代数据(数组或列表)的表现界面。ForEach构件的迭代规则为:从"first"开始计数,每次计数值加"step",直到计数值大于或等于"rows"时迭代停止。在默认情况下,"first"值为0,"step"值为1,"rows"值为数组或集合数据的长度。

30.24.1. 构件信息

表 30.68. 构件信息

Component Typeorg.operamasks.faces.component.widget.invisible.ForEach
Component Familyorg.operamasks.faces.widget.Invisible
Component Classorg.operamasks.faces.component.widget.invisible.ForEach
Tag Classorg.operamasks.faces.webapp.widget.ForEachTag
Renderer Typeorg.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.24.2. 属性

表 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)
是否必须 延时求值
代表每一行数据的变量

30.24.3. 构件API

30.24.4. 示例

<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中。