<x:repeat>

x:repeat 操作用来对 JavaBeans™ 的重复属性进行迭代,更明确地说,对结果集中的行或列进行迭代。对每一个迭代,将 x:repeat 主体内的所有操作和 HTML 处理一遍。

可以通过指定 DBSelectDBProcedureCall Bean 以及它的一些重复属性(对这些属性进行迭代)和/或通过指定下标变量的开始和结束值来控制迭代数。

下标变量可以是隐式的,也可以对其指定一个名称并在 scriptlet 或 x:repeat 主体内的其他 JSP SQL 操作中以显式方式使用。无论下标变量是隐式的还是显式的,它都用作某些属性的缺省值,这些属性标识 x:repeat 主体中的 JSP SQL 操作中的行、列或参数。有关这一点的详细信息,请参阅下面的图表。

如果指定开始和结束值以及显式的下标变量,则可使用下标变量来对任何对象(而不仅仅是 SelectProcedureCall)进行迭代。

可以嵌套 x:repeat 操作。例如,可以使用外部的 x:repeat 来对结果集的行进行迭代,并使用内部的 x:repeat 来对每一行的列进行迭代。

语法

<x:repeat  	name = "target bean name"
			over = "rows|columns|nothing"			index = "name"
			start = "starting_index"
			end = "ending_index >
</x:repeat>

x:repeat 操作具有下列属性:

name
作为 repeat 主体内的缺省操作目标的 DBSelectDBProcedureCall Bean 的名称。此属性是可选的。如果将此 x:repeat 嵌套在另一个 repeat 之中,则它会继承那个 repeat 的 name 属性。

还可以将针对除指定的 Bean 之外的 Bean 的操作放置在 x:repeat 的主体中。仅当使用相同的值来作为其他 Bean 的行、列或其他重复属性的索引时,才应该这样做。对于 x:getColumnx:updateRow 这样的操作,需要在操作中提供另一个 Bean 的名称,而不是使用其缺省值。

over
将要对其执行迭代的重复属性。此属性是可选的。如果您不提供值,则对行执行迭代。name 属性的值标识了重复属性所属的对象。

这个 x:repeat 的下标变量的值的范围介于重复属性的第一次出现与最后一次出现之间。下标变量还成为 x:repeat 主体中 JSP SQL 标记的下列属性的缺省值:

over 的值 JSP SQL 标记 属性 索引范围
rows <x:updateRow>

<x:deleteRow>

<x:insertRow>

<x:getColumn>

<x:setColumn>

row 1 至行数(包括 1 和行数)
columns <x:getColumn>

<x:setColumn>

index 1 至列数(包括 1 和列数)

如果此操作没有它自己的 name 属性,并且没有从父 x:repeat 继承一个属性,则下标变量仍作为 x:repeat 主体内这些属性的缺省值,但您必须通过在 x:repeat 标记上显式地指定 end 属性来确定索引的结束值。

如果 over 的值是 rows,并且 name 属性标识了一个 DBProcedureCall Bean,则对 DBProcedureCall Bean 的当前结果集的行执行迭代。在此情况下,请不要在 x:repeat 的主体内移至另一个结果集,因为这样将动态地更改下标变量的范围。

index
这个 x:repeat 的下标变量的可选名称。指定的值必须是有效的 Java™ 标识。在 scriptlet 中,可以在这个 repeat(或任何嵌套在这个 repeat 中的 repeat)的主体内使用这个(区分大小写的)名称。

使用此名称创建的变量将具有 Integer 类型。如果在 scriptlet 中使用此变量,则确保 Integer 在使用该变量的上下文中有效。例如,DBSelect Bean 的 setCurrentRow() 方法要求一个 int 变量而不是整数。然而,当在其他 JSP SQL 操作(例如,x:getColumn) 中使用此变量时,您不必关心数据类型。

start
这个 x:repeat 的开始索引值。此属性是可选的。缺省值为 1,有效值是正整数。
end
这个 x:repeat 的结束索引值。如果此操作具有 name 属性(这可以是继承而来的),并且它的 over 属性不是 nothing,则可以省略此属性。名称与进行迭代的重复属性的组合限制了迭代次数。如果还指定了 end 属性,则先达到的限制结束迭代。

end 属性指定“包含”限制,这表示这个值是要为其执行迭代的最后一个值。如果 end 属性的值小于 start 属性的值,则不执行迭代。有效值为整数 0 或更大。


反馈