<x:repeat>

x:repeat 動作用來在 JavaBeans™ 的重複內容上進行疊代作業,更明確地說,是在結果集中的各列或直欄上進行疊代作業。每次疊代都會處理一次 x:repeat 主體內的 ll 動作和 HTML。

您可以指定 DBSelectDBProcedureCall Bean 以及它要進行疊代的某些重複內容,或指定索引變數的起始值和終止值,或同時採用這兩種方式來控制疊代的數目。

索引變數可以是隱含的,您也可以指定一個名稱給它,並在 x:repeat 主體內的 Scriptlet 或其他 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 以巢狀方式存在另一 x: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 至列數(內含)
columns <x:getColumn>

<x:setColumn>

index 1 至直欄數(內含)

如果動作沒有自己的 name 屬性,且沒有繼承母項 x:repeat 的 name 屬性, 索引變數就會成為 x:repeat 主體內這些屬性的預設值,但您必須在 x:repeat 標示中明確指定 end 屬性來決定索引的 end 值。

如果 over 值是 rows,name 屬性會識別一個 DBProcedureCall Bean, 且會在 DBProcedureCall Bean 的現行結果集各列上進行疊代作業。在這個情況下,請勿移到 x:repeat 主體內的另一結果集,因為這會動態變更索引變數的範圍。

index
這個 x:repeat 的索引變數的選用名稱。指定的值必須是有效的 Java™ ID。 這個(會區分大小寫)名稱可用在這個 repeat(或它內部的任何巢狀 repeat)主體內的 Scriptlet。

使用這個名稱建立的變數,類型為 Integer。 如果您在 scriptlet 中使用這個變數,請確定 Integer 在使用的環境定義中有效。 比方說,DBSelect Bean 的 setCurrentRow() 方法需要的是 int 變數,而不是 Integer(整數)。不過,當在其他 JSP SQL 動作如 x:getColumn 中使用這個變數時,您不需要考慮資料類型。

start
這個 x:repeat 的起始索引值。這個屬性是選用的。 預設值是 1,有效值是正整數。
end
這個 x:repeat 的終止索引值。如果動作有 name 屬性(可以是繼承的屬性)而且其 over 屬性不含值,您就可以忽略這個屬性。要進行疊代的名稱和重複內容的組合,會在疊代數目上強加限制。 如果您也指定了 end 屬性,則疊代會結束於第一個限制。

end 屬性指定「內含的」限制,表示這個值是執行疊代的最後的值。 (如果 end 屬性值小於 start 屬性值,就不會進行疊代。) 有效值是 0 或更大的整數。

使用條款 | 讀者意見
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.