El ejemplo siguiente muestra cómo crear un bucle y, a continuación, repetir en bucle los resultados de una norma activada en una zona de contenido.
- Este archivo de ejemplo, denominado example.jsp, empieza con los códigos html de inicio habituales
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>example.jsp</TITLE>
</HEAD>
<BODY>
- Ahora, debe indicar al JSP que va a utilizar una zona de contenido, que también se denomina bean de java. El parámetro class es el nombre de clase completo, e id es el nombre de la zona de contenido. Para facilitar la identificación, es recomendable denominar el id con un nombre similar al nombre de clase.
<jsp:useBean class="sample10.contentspots.GetLatestNewsSpot" id="getLatestNewsSpot"/>
- A continuación, debe pasar el objeto de petición a la Máquina de recursos. Para ello, invoque el método siguiente en la zona de contenido que se ha inicializado.
<%getLatestNewsSpot.setRequest(request);%>
- La zona de contenido está ahora preparada para su utilización. Coloque la línea de código siguiente en algún lugar del HTML de la página cerca del contenido que se va a devolver.
La línea siguiente es la que muestra la "zona azul" siempre que se previsualiza el JSP desde el entorno de montaje. Cuando no se previsualiza el JSP, la línea siguiente no hace nada. El usuario puede modificar la norma que crea el contenido durante la vista previa pulsando en la "zona azul".
<%=getLatestNewsSpot.getPreviewAnchorTag()%>
- En las líneas siguientes, se incluye un bloque de prueba para detectar excepciones y se crea una matriz, _a0 de tipo sample10.News. sample10.News es el nombre de clase del recurso que la zona de contenido, que ya ha sido definida, devuelve.
El método getRuleContent() devolverá una matriz de Objetos de recursos. La matriz la determina la norma correlacionada con la zona de contenido. Cuando cree una zona de contenido, debe especificar un tipo de recurso.
La raíz, _a0, está poblada con los resultados de la llamada al método getRuleContent() del área de contenido. A continuación, se creará otra variable, _p0, para representar una sola instancia del recurso devuelto por el área de contenido. Finalmente, la primera instancia de la matriz _a0 se asigna a _p0.
Si no hay ninguna instancia en _a0, la asignación emitirá una excepción, que se detecta y describe a continuación, en el paso 9.
<%
try {
sample10.News[] _a0 = getLatestNewsSpot.getRuleContent();
sample10.News _p0 = _a0[0]; // emite una excepción si está vacía.
%>
- Llegado este punto, la zona de contenido ha devuelto al menos un resultado. Cualquier HTML entre este paso y el paso siguiente se mostrará una vez exactamente, antes de que el usuario empiece a repetir en bucle el contenido devuelto. En este caso, se ha creado una tabla y se ha iniciado su cuerpo. Se puede crear aquí también un encabezamiento de tabla.
<TABLE>
<THEAD>
<TR>
<TD>Story ID</TD>
<TD>Headline</TD>
<TD>Author</TD>
</TR>
<THEAD>
<TBODY>
- Con cualquier encabezamiento/inicialización completa, empiece por repetir en bucle el conjunto de resultados. El bucle for siguiente empieza dicha repetición en bucle.
<%
for (int _i0 = 0; ; ) { %>
- El contenido comprendido entre este paso y el paso siguiente se mostrará durante cada iteración del bucle, una vez por cada parte del contenido devuelto desde la zona de contenido. En este ejemplo, una fila de tablas con tres celdas es la salida, y se extrae un campo del recurso de cada celda. Estos métodos deben definirse en la Clase de recurso. Para conocer los métodos adecuados, puede visualizar la Clase de recurso creada mediante los asistentes y consultar la vista Esquema.
Puede accederse a cualquier método público.
<TR>
<TD><%=_p0.getId()%></TD>
<TD><%= _p0.getHeadline()%></TD>
<TD><%= _p0.getAuthor()%></TD>
</TR>
- En la sección siguiente, el contador de bucles aumenta a medida que se devuelven partes del contenido desde la zona de contenido y la sentencia try intenta agarrar otro resultado del conjunto de resultados original en la matriz _a0.
Si no hay más resultados en la matriz, se emite java.lang.ArrayIndexOutOfBoundsException pero queda retenida en el bloque catch siguiente. Un break finaliza el bucle.
<%
_i0++;
try {
_p0 = _a0[_i0];
}
catch (java.lang.ArrayIndexOutOfBoundsException _e0) {
break;
}
} %>
- Esta sección se ejecuta cuando finaliza el bucle for. Se trata de una sección análoga a la sección de encabezamiento anterior una vez que todos los resultados se han mostrado desde el conjunto de resultados devueltos por la zona de contenido.
</TBODY>
</TABLE>
- La línea siguiente detecta cualquier java.lang.ArrayIndexOutOfBoundsException que pueda haberse emitido en la sentencia try hallada en el código anterior antes del encabezamiento. Cuando se detecta una excepción, ésta debe indicar que no se han devuelto resultados desde la zona de contenido.
<%
}
catch (java.lang.ArrayIndexOutOfBoundsException _e0) {
%>
- Ahora, indique que no se ha devuelto ningún resultado. El contenido que se indica aquí sólo se visualiza si no se devuelto ningún resultado desde la zona de contenido.
Lo sentimos, no hay ningún elemento nuevo que mostrar.
- Para completar su JSP personalizado, añada una llave de cierre } final para cerrar el bloque catch y los demás códigos HTML.
<%
} %>
</BODY>
</HTML>