Ejemplo: utilización de tsx:repeat de JSP (JavaServer Pages) para la iteración de un conjunto de resultados
El distintivo <tsx:repeat> repite un conjunto de resultados. El conjunto está contenido en un bean. El bean puede ser un bean estático, por ejemplo, un bean creado mediante el uso del asistente de la base de datos de IBM® WebSphere Studio, o un bean generado dinámicamente, por ejemplo, un bean generado por la sintaxis <tsx:dbquery> syntax.

La tabla siguiente es una representación gráfica del contenido de un bean llamado miBean:
Columna | col1 | col2 | col3 |
---|---|---|---|
row0 | amigos | romanos | conciudadanos |
row1 | panceta | lechuga | tomate |
row2 | mayo | junio | julio |
Algunas observaciones acerca del bean:
- Los nombres de las columnas de la tabla de la base de datos se convierten en los nombres de las propiedades del bean. La sección <tsx:dbquery> describe una técnica para correlacionar los nombres de columnas con distintos nombres de propiedades.
- Las propiedades del bean se indexan. Por ejemplo, miBean.get(Col1(row2)) devuelve Mayo.
- Los resultados de la consulta se presentan en las filas. El distintivo <tsx:repeat> repite las filas, empezando por la fila inicial.
En la tabla siguiente se compara el uso del distintivo <tsx:repeat> para repetir un bean estático con el uso de un bean generado dinámicamente:
Ejemplo de bean estático | Ejemplo de bean <tsx:repeat> |
---|---|
myBean.class // Código para obtener una conexión // Código para obtener los datos Select * from MiTabla; // Código para cerrar la conexiónArchivo JSP <tsx:repeat index=abc> <tsx:getProperty name="miBean" property="col1(abc)" /> </tsx:repeat> Nota:
|
Archivo JSP <tsx:dbconnect id="conn" userid="alice"passwd="test" url="jdbc:db2:sample" driver="COM.ibm.db2.jdbc.app.DB2Driver"> </tsx:dbconnect > <tsx:dbquery id="dynamic" connection="conn" > Select * from MiTabla; </tsx:dbquery> <tsx:repeat index=abc> <tsx:getProperty name="dynamic" property="col1(abc)" /> </tsx:repeat> Nota:
|
Creación de índices implícita y explícita
Los ejemplos 1, 2 y 3 muestran cómo utilizar el distintivo <tsx:repeat>. Los ejemplos generan la misma salida si todas las propiedades indexadas tienen 300 o menos elementos. Si hay más de 300 elementos, los ejemplos 1 y 2 visualizarán todos los elementos, mientras que el ejemplo 3 sólo mostrará los 300 primeros elementos.
El ejemplo 1 muestra la creación de índices implícita con el índice inicial predeterminado y el índice final predeterminado. El bean con el número más pequeño de propiedades indexadas limita el número de veces que se repetirá el bucle.
<table> <tsx:repeat> <tr><td><tsx:getProperty name="serviceLocationsQuery" property="city" /> </tr></td> <tr><td><tsx:getProperty name="serviceLocationsQuery" property="address" /> </tr></td> <tr><td><tsx:getProperty name="serviceLocationsQuery" property="telephone" /> </tr></td> </tsx:repeat> </table>
En el ejemplo 2 se muestran la creación de índices, el índice inicial y el índice final:
<table> <tsx:repeat index=myIndex start=0 end=2147483647> <tr><td><tsx:getProperty name="serviceLocationsQuery" property=city(myIndex) /> </tr></td> <tr><td><tsx:getProperty name="serviceLocationsQuery" property=address(myIndex) /> </tr></td> <tr><td><tsx:getProperty name="serviceLocationsQuery" property=telephone(myIndex) /> </tr></td> </tsx:repeat> </table>
El ejemplo 3 muestra la creación de índices explícita y el índice final con el índice inicial implícito. Aunque el atributo index está especificado, la propiedad indexada city todavía puede indexarse implícitamente ya que el distintivo (MyIndex) no es obligatorio.
<table> <tsx:repeat index=myIndex end=299> <tr><td><tsx:getProperty name="serviceLocationsQuery" property="city" /t> </tr></td> <tr><td><tsx:getProperty name="serviceLocationsQuery" property="address(myIndex)" /> </tr></td> <tr><td><tsx:getProperty name="serviceLocationsQuery" property="telephone(myIndex)" /> </tr></td> </tsx:repeat> </table>
Anidación de bloques <tsx:repeat>
Puede anidar bloques <tsx:repeat>. Cada bloque se indexa por separado. Esta posibilidad es útil para intercalar propiedades en dos beans, o propiedades que tienen subpropiedades. En el ejemplo, se anidan dos bloques <tsx:repeat> para visualizar la lista de canciones de cada CD del carro de la compra del usuario.
<tsx:repeat index=cdindex> <h1><tsx:getProperty name="shoppingCart" property=cds.title /></h1> <table> <tsx:repeat> <tr><td><tsx:getProperty name="shoppingCart" property=cds(cdindex).playlist /> </td></tr> </tsx:repeat> </table> </tsx:repeat>