JSP 上の動的コンテンツのフォーマット

下記のサンプルは、ループを作成してから、コンテンツ・スポットで発行するルールの結果でループする方法を示します。
  1. example.jsp という名前のこのサンプル・ファイルは、標準的な開始 HTML タグから始まります。
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    <HTML>
    <HEAD>
    <TITLE>example.jsp</TITLE>
    </HEAD>
    <BODY>
  2. Java Bean とも呼ばれる JSP に、コンテンツ・スポットを使用することを通知する必要があります。 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 タイプの配列 _a0 が作成されます。sample10.News は、すでに定義されているコンテンツ・スポットによって戻されるリソースのクラス名です。

    getRuleContent() メソッドは、リソース・オブジェクトの配列を戻します。 この配列は、コンテンツ・スポットにマップされるルールによって決定されます。 コンテンツ・スポットを作成する際に、リソース・タイプを指定する必要があります。

    配列 _a0 には、コンテンツ・スポットでの getRuleContent() メソッドへの呼び出しの結果が取り込まれます。次に、別の変数 _p0 が作成され、コンテンツ・スポットによって戻されるリソースの単一インスタンスを表します。最後に、_a0 配列内の最初のインスタンスが _p0 に割り当てられます。 _a0 にインスタンスがない場合、この割り当ては、キャッチされ、下記のステップ 9 で説明されている例外をスローします。

    <%
    try {
      sample10.News[] _a0 = getLatestNewsSpot.getRuleContent();
      sample10.News _p0 = _a0[0]; // throws an exception if empty. 
    %>
  6. この時点で、コンテンツ・スポットは少なくとも 1 つの結果を戻しました。このステップと次のステップとの間の HTML は、正確に 1 回表示された後、戻されたコンテンツでループを開始します。 この場合、テーブルが作成され、その本体が開始しました。 ここでは、テーブル・ヘッダーも作成できます。
    <TABLE>
    	<THEAD>
    		<TR>
    			<TD>Story ID</TD>
    			<TD>Headline</TD>
    			<TD>Author</TD>
    		</TR>
    	<THEAD>
    	<TBODY>
  7. ヘッダー/初期化が完了すると、結果セットのループから開始します。 次の for ループはそのループを開始します。
    <%
          for (int _i0 = 0; ; ) { %>
  8. このステップと次のステップとの間のコンテンツは、ループの各反復時に、コンテンツ・スポットから戻されるコンテンツごとに 1 回、表示されます。 この例では、3 つのセルを持つテーブル行が出力であり、各セル内のリソースから 1 つのフィールドを引き出します。 これらのメソッドは、リソース・クラスで定義されなければなりません。 適切なメソッドを検出するには、ウィザードによって作成されたリソース・クラスを表示し、「アウトライン」ビューを調べることができます。 任意の public メソッドにアクセスできます。
    <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. 結果が戻されなかったことを示します。 ここでコンテンツが表示されるのは、コンテンツ・スポットから結果が戻されなかった場合だけです。
       Sorry, there are no News items to display.
  13. パーソナライズされた JSP を完成するには、1 つの最終 } を追加して、catch ブロックをクローズし、残りの HTML タグをクローズします。
    <%
    } %>
    </BODY>
    </HTML>

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