x:repeat 動作用來在 JavaBeans™ 的重複內容上進行疊代作業,更明確地說,是在結果集中的各列或直欄上進行疊代作業。每次疊代都會處理一次 x:repeat 主體內的 ll 動作和 HTML。
您可以指定 DBSelect 或 DBProcedureCall Bean 以及它要進行疊代的某些重複內容,或指定索引變數的起始值和終止值,或同時採用這兩種方式來控制疊代的數目。
索引變數可以是隱含的,您也可以指定一個名稱給它,並在 x:repeat 主體內的 Scriptlet 或其他 JSP SQL 動作中明確使用它。不論索引變數是隱含或明確的,它都會作為在 x:repeat 主體內的 JSP SQL 動作中,用來識別列、直欄或參數的特定屬性的預設值。 請參閱下圖,以取得詳細資訊。
如果您指定起始和終止值以及明確的索引變數,您可以利用索引變數在任何物件上進行疊代,而不只是 Select 或 ProcedureCall。
您可以建立 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 動作有下列屬性:
如果動作的目標 Bean 不是指名的 Bean, 您也可以將該動作放在 .x:repeat 的主體中。只有在能夠使用相同的值,在其他 Bean 的列、欄或其他重複的內容中建立索引時,才應該這麼做。對於 x:getColumn 或 x:updateRow 這類動作, 您必須在動作上提供其他 Bean 的名稱,而不是採用預設值。
這個 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 主體內的另一結果集,因為這會動態變更索引變數的範圍。
使用這個名稱建立的變數,類型為 Integer。 如果您在 scriptlet 中使用這個變數,請確定 Integer 在使用的環境定義中有效。 比方說,DBSelect Bean 的 setCurrentRow() 方法需要的是 int 變數,而不是 Integer(整數)。不過,當在其他 JSP SQL 動作如 x:getColumn 中使用這個變數時,您不需要考慮資料類型。
end 屬性指定「內含的」限制,表示這個值是執行疊代的最後的值。 (如果 end 屬性值小於 start 屬性值,就不會進行疊代。) 有效值是 0 或更大的整數。