格式化 JSP 上的动态内容

下面的样本显示如何创建循环,然后根据内容点中激发的规则结果进行循环。
  1. 此样本文件名为 example.jsp 并以典型的 HTML 标记开头:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    <HTML>
    <HEAD>
    <TITLE>example.jsp</TITLE>
    </HEAD>
    <BODY>
  2. 现在必须告诉 JSP 您将使用内容点,又称为 Java bean。class 参数是标准类名,而 id 是内容点的名称。它有助于对 id 指定类似于类名的名称以便识别。
    <jsp:useBean class="sample10.contentspots.GetLatestNewsSpot" id="getLatestNewsSpot"/>
  3. 接下来必须将请求对象传递给资源引擎。为此,对已经实例化的内容点调用以下方法。
    <%getLatestNewsSpot.setRequest(request);%>
  4. 现在就可以使用内容点了。将下面一行代码放在 HTML 页面中接近要返回的内容的位置。每次从编写环境预览 JSP 时,下一行就会显示“蓝点”。如果不预览 JSP,下一行不起任何作用。用户在预览期间可通过单击“蓝点”来修改用于创建内容的规则。
    <%=getLatestNewsSpot.getPreviewAnchorTag()%>
  5. 在下面几行中,将包括 try 块以捕获所有异常,并且将创建类型为 sample10.News 的数组 _a0sample10.News 是已经定义的内容点返回的资源的类名。

    getRuleContent() 方法将返回一组资源对象。该数组是由映射至内容点的规则确定的。在创建内容点时,必须指定资源类型。

    将以调用内容点上的 getRuleContent() 方法的结果填充数组 _a0。然后,将创建另一个变量 _p0 来表示内容点返回的单个资源实例。最后,_a0 数组中的第一个实例被指定给 _p0。如果 _a0 中没有实例,该赋值将抛出异常,该异常会被捕获并在步骤 9 中描述如下。

    <%
    try {
      sample10.News[] _a0 = getLatestNewsSpot.getRuleContent();
      sample10.News _p0 = _a0[0]; // throws an exception if empty. 
    %>
  6. 此时内容点至少返回一个结果。在开始根据返回的内容进行循环之前,此步骤与下一步骤之间的所有 HTML 刚好显示一次。在此情况下,已经创建了表并已开始创建它的主体了。此处还会创建表头。
    <TABLE>
    	<THEAD>
    		<TR>
    			<TD>Story ID</TD>
    			<TD>Headline</TD>
    			<TD>Author</TD>
    		</TR>
    	<THEAD>
    	<TBODY>
  7. 任何表头/初始化完成之后,开始根据结果集进行循环。下面的 for 循环开始该循环。
    <%
          for (int _i0 = 0; ; ) { %>
  8. 此步骤与下一步骤之间的内容将在循环的每次迭代期间显示,并且会对从内容点返回的每块内容显示一次。在此示例中,带有三个单元格的表行就是输出,在每个单元格中从资源中抽出一个字段。必须在资源类上定义这些方法。要了解相应的方法,可查看向导创建的资源类并查看“大纲”视图。所有公用方法都可访问。
    <TR>
    <TD><%=_p0.getId()%></TD>
    <TD><%= _p0.getHeadline()%></TD>
    <TD><%= _p0.getAuthor()%></TD>
    </TR>
  9. 在下面这一部分中,循环计数器将在从内容点返回内容块时递增,并且 try 语句尝试从存储在 _a0 数组中的原始结果集获取另一结果。如果数组中没有其它结果,则会抛出 java.lang.ArrayIndexOutOfBoundsException 但该异常会在下面的 catch 块中捕获。break 终止循环。
            <%
            _i0++;
            try {
              _p0 = _a0[_i0];
            }
            catch (java.lang.ArrayIndexOutOfBoundsException _e0) {
                  break;        }
          } %>
  10. 这一部分是在 for 循环结束时执行的。这类似于从内容点返回的结果集显示所有结果后的以上头部分。
    	</TBODY>
    </TABLE>
  11. 下面一行捕获 try 语句中可能抛出的任何 java.lang.ArrayIndexOutOfBoundsException,该语句在头之前的以上代码中。捕获异常后,它将指出未从内容点返回任何结果。
    <%
    }
    catch (java.lang.ArrayIndexOutOfBoundsException _e0) {
    %>
  12. 现在提供了提示,说明未返回任何结果。仅当内容点未返回任何结果时,才会显示此处的内容。
       很遗憾,没有要显示的新项。
  13. 要完成个性化 JSP,添加一个 final } 以结束 catch 块并结束其余 HTML 标记。
    <%
    } %>
    </BODY>
    </HTML>

(C) Copyright IBM Corporation 2002, 2005. All Rights Reserved.