ヘッダーをスキップ

Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス
10g(10.1.3.1.0)

B31854-01
目次
目次
索引
索引

戻る 次へ

9 JSPのユーティリティとユーティリティ・タグ

この章では、JSPページで使用できる各種のOC4Jユーティリティ機能について説明します。この章の構成は次のとおりです。

JspScopeListenerによるJSPのイベント処理

標準サーブレットとJSPテクノロジでサポートされるのは、セッション・ベースのイベントのみです。Oracleでは、このサポートを、oracle.jsp.webutil.tagutil.eventパッケージのJspScopeListenerインタフェースとJspScopeEventクラスを使用して、ページ・ベース、リクエスト・ベースおよびアプリケーション・ベースのイベントにまで拡張します。

次の各項では、JspScopeListener機能について説明して例を示します。

JspScopeListenerの一般的な使用

アプリケーション内のJavaオブジェクトの場合は、JspScopeListenerインタフェースを適切なクラスに実装してから、そのクラスのオブジェクトをjsp:useBeanなどのタグを使用して、JSPスコープに連結します。

スコープの最後に到達すると、JspScopeListenerを実装したオプションとそのスコープに連結されたオブジェクトが通知されます。JSPコンテナでは、JspScopeEventインスタンスをJspScopeListenerインタフェースに指定されているoutOfScope()メソッドを使用して、該当するオブジェクトに送信することによって、この通知を実行します。

このイベント・リスナーの機能は、pageスコープやrequestスコープに関するオブジェクト・リソースを、エラー状態に関係なく常に解放しておこうとする開発者にとっては、大きな利点となります。この機能によって、開発者は、自分のページ実装をJavaのtry/catch/finallyブロックで囲む必要がなくなります。

JspScopeEventオブジェクトのプロパティには、次の内容が含まれています。

JspScopeEventクラスには次のコンストラクタがあります。

public JspScopeEvent (ServletContext sc, Object container, String name,
                      int scope)

OC4JでのJspScopeListenerの使用

JspScopeListenerは、様々な機能を使用して異なるスコープをサポートします。ただし、すべてはサーブレットとJSPの標準に基づいて実装されます。

OC4J環境でページを実行する場合は、便宜上、pageスコープに対するOC4J固有の実行時実装もあります。

これらの機能については次の項を参照してください。

JspScopeListenerの要件

JspScopeListenerの実装には、次の内容が必要です。

リクエスト・スコープをサポートするサーブレット・フィルタの実装

requestスコープのオブジェクトは、サーブレット・フィルタによってサポートされています。フィルタ処理は、指定したURLパターンに一致するすべてのサーブレットに適用されます。

リクエスト・スコープ・オブジェクトのイベント処理をサポートするには、次のようなエントリをアプリケーションのweb.xmlファイルに追加するか、必要に応じてorion-web.xmlまたはglobal-web-application.xmlファイルに追加します。JspScopeListener機能を適切に操作するには、この設定を他のすべてのfilter設定の後に指定する必要があります。

<filter> 
   <filter-name>Request Filter</filter-name> 
   <filter-class>oracle.jsp.event.impl.RequestScopeFilter</filter-class> 
</filter> 
<!-- Define filter mappings for the defined filters --> 
<filter-mapping> 
   <filter-name>Request Filter</filter-name> 
   <url-pattern>/jsp/*</url-pattern> 
</filter-mapping> 


注意

この特殊な例では、フィルタが処理するURLパターンは「/jsp/*」です。ユーザーは、「/*.jsp」や「/*」などの他のパターンを選択できます。 


アプリケーション・スコープをサポートするリスナー・クラスの実装

applicationスコープを含むオブジェクトは、Servlet仕様に従って、サーブレット・コンテキスト・リスナー実装クラスによってサポートされます。

アプリケーション・スコープ・オブジェクトのイベント処理をサポートするには、次のようなエントリをアプリケーションのweb.xmlファイルに追加します。JspScopeListener機能を適切に操作するには、この設定を他のすべてのlistener設定の後に指定する必要があります。

<listener> 
   <listener-class>oracle.jsp.event.impl.AppScopeListener</listener-class> 
</listener> 

アプリケーション・スコープ・オブジェクトの場合は、アプリケーションとサーブレット・コンテキストの終了時の通知に加えて、属性がサーブレット・コンテキストで置換されたとき、またはサーブレット・コンテキストから削除されたときも、通知が行われます。たとえば、アプリケーション・スコープ・オブジェクトのリスナーoutOfScope()メソッドが次の状況でコールされたとします。この場合のサーブレット・コンテキスト・オブジェクトは、ctxです。

ctx.setAttribute("name", "Smith");
...
ctx.setAttribute("name, "Jones");

または

ctx.setAttribute("name", "Smith");
...
ctx.removeAttribute("name");


注意

この機能は、Oracle9iASリリース2より前では使用できませんでした。 


セッション・スコープをサポートするHttpSessionBindingListenerとの統合

セッション・スコープ・オブジェクトの場合は、JspScopeListenerインタフェースと標準のjavax.servlet.http.HttpSessionBindingListenerインタフェースの両方を実装するクラスを作成できます。この機能によって、他のスコープでも、このクラスのインスタンスをサポートする柔軟性が得られます。ただし、インスタンスをsessionスコープ以外で使用しない場合、JspScopeListenerの実装は不要です。

統合の使用例では、HttpSessionBindingListenerインタフェースに指定されているvalueUnbound()メソッドが、JspScopeListenerインタフェースに指定されているoutOfScope()メソッドをコールする必要があります。

次に、基本的な例を示します。

import oracle.jsp.event.impl.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

class SampleObj implements HttpSessionBindingListener,JspScopeListener 
{ 
   public void valueBound(HttpSessionBindingEvent e) 
   { 
      System.out.println("The object implements the JspScopeListener also"); 
   } 

   public void valueUnBound(HttpSessionBindingEvent e) 
   { 
      try 
      { 
         outOfScope(new JspScopeEvent(null,(Object)e.getSession(),
             e.getName(),javax.servlet.jsp.PageContext.SESSION_SCOPE)); 
      } catch (Throwable e) {} 
   ........... 
   } 
   public void outOfScope(JspScopeEvent e)
   {...}
}

EJBタグ

OC4Jには、JSPページでのEnterprise JavaBeansの使用を簡素化するカスタム・タグ・ライブラリが用意されています。このライブラリには、ホーム・インスタンスの作成、EJBインスタンスの作成およびEJBのコレクション間の反復などに使用するタグが含まれています。

OC4J EJBタグの機能は、J2EE仕様に従っています。このタグを使用すると、web.xmlファイルの構成情報を使用して、EJBを名前でインスタンス化できます。タグの中には、通常のJavaBeanの起動に使用するjsp:useBeanタグの機能に似た機能を持つuseBeanタグがあります。

次の各項では、各タグについて説明し、例を示します。

EJBタグの構成

使用する各EJBについて、アプリケーションのweb.xmlファイルにある<ejb-ref>要素を、次の例のように使用します。

<ejb-ref>
   <ejb-ref-name>ejb/DemoSession</ejb-ref-name>
   <ejb-ref-type>Session</ejb-ref-type>
   <home>ejbdemo.DemoSessionHome</home>
   <remote>ejbdemo.DemoSession</remote> 
</ejb-ref>

<ejb-ref>要素とそのサブ要素、またはローカル・インタフェースを使用するための<ejb-local-ref>は、Servlet仕様に準拠して使用されます。概要は、次のとおりです。

これらの値は、EJBタグの属性値に反映されます。

EJBの開発と構成の追加情報は、『Oracle Containers for J2EE Enterprise JavaBeans開発者ガイド』を参照してください。

EJBタグの説明

この項では、OC4J EJBタグの構文と属性を説明します。次の要件に注意してください。

taglibディレクティブ、予約済のタグ・ライブラリ・ディレクトリ、TLDファイルおよびuri値の内容の詳細は、『Oracle Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。


注意

  • このタグ構文では、接頭辞「ejb:」が使用されます。慣例的にこのように表記しますが、必須ではありません。任意の接頭辞をtaglibディレクティブに指定できます。

  • このマニュアルのタグ構文規則の詳細は、「タグ構文の表記と意味」を参照してください。

 

次の各項では、EJBタグの詳細を説明します。

EJBインスタンスを最初に作成するときは、useHomeタグを使用してホーム・インタフェース・インスタンスを作成する必要があります。その後、適宜、次のインスタンスを作成します。

EJBインスタンスは、作成された後、適切なスコープ・オブジェクトに入れられます。その後でこのインスタンスにアクセスするために必要なのは、useBeanタグのみです。

EJB useHomeタグ

useHomeタグは、EJBのホーム・インタフェースを参照して、インスタンスを作成します。

構文

<ejb:useHome id = "home_instance_name" 
             type = "home_interface_type" 
             location = "home_lookup_name" 
           [ local = "true" | "false" ] />

このタグは、ボディを使用しません。

属性

<ejb:useHome id="aomHome" type="com.acme.atm.ejb.AccountOwnerManagerHome"
             location="java:comp/env/ejb/accountOwnerManager" />

EJB useBeanタグ

EJB useBeanタグは、EJBをインスタンス化して使用するためのタグです。idtypeおよびscopeの各属性は、通常のJavaBeanをインスタンス化する標準のjsp:useBeanタグの場合と同じように使用します。

EJBを最初にインスタンス化する場合は、次の2つの機能のいずれかを使用できます。

ネストしたcreateBeanタグを使用している場合、EJBインスタンスは、親useBeanタグのvalue属性に暗黙的に戻されます。一度EJBがインスタンス化されると、value属性とネストしたcreateBeanタグは、同じEJBインスタンスを使用する後続のuseBeanタグには不要になります。


注意

EJBインスタンスのコレクションの使用方法は、「EJB iterateタグ」を参照してください。 


構文

<ejb:useBean id = "EJB_instance_name" 
             type = "EJB_class_name" 
           [ value = "<%=Object%>" ]
           [ scope = "page" | "request" | "session" | "application" ]  
           [ local = "true" | "false" ] >

... nested createBean tag for first instantiation, if no value attribute ...

</ejb:useBean>
属性

次に、すでにインスタンス化されているEJBの使用例を示します。

<ejb:useBean id="bean" type="com.acme.MyBean" scope="session" />

EJB createBeanタグ

EJBを最初にインスタンス化するときに、EJB useBeanタグのvalue属性を使用しない場合は、EJB createBeanタグをuseBeanタグ内にネストし、EJBインスタンスの作成作業を実行する必要があります。これが、EJBObjectインスタンスになります。このインスタンスは、親useBeanタグのvalue属性に暗黙的に戻されます。

構文

<ejb:createBean instance = "<%=Object%>" />

このタグは、ボディを使用しません。

属性

このcreateBeanタグ内で、EJBホーム・インタフェース・インスタンスのcreate()メソッドが、EJBのインスタンスを作成します。

<ejb:useBean id="bean" type="com.acme.MyBean" scope="session"> 
     <ejb:createBean instance="<%=home.create()%>" /> 
</ejb:useBean>

EJB iterateタグ

このタグを使用してEJBインスタンスのコレクション間を反復します。このタグは主としてエンティティBeanに使用されます。これは、エンティティBeanの標準のfinderメソッドがコレクションを戻すためです。

開始タグでは、finderメソッドの結果を介してコレクションがホーム・インタフェースから取得されます。タグ・ボディでは、必要に応じてコレクションが反復されます。


注意

単一EJBインスタンスの使用方法は、「EJB useBeanタグ」を参照してください。 


構文

<ejb:iterate id = "EJB_instance_name" 
             type = "EJB_class_name" 
             collection = "<%=Collection%>" 
           [ max = "<%=Integer%>" ] >

... body ...

</ejb:iterate>

ボディは、コレクション内の各EJBについて一度評価されます。

属性

<ejb:iterate id="account" type="com.acme.atm.ejb.Account"
             collection="<%=accountManager.getOwnerAccounts()%>"
             max="100"> 
     <jsp:getProperty name="account" property="id" /> 
</ejb:iterate>

EJBタグの例

この項では、EJBタグの使用例を示します。1つはセッションBeanの使用例、もう1つはエンティティBeanの使用例です。

EJBタグのセッションBeanの例

この例は、アプリケーションのweb.xmlファイルの次の構成に依存します。

<ejb-ref>
   <ejb-ref-name>ejb/DemoSession</ejb-ref-name>
   <ejb-ref-type>Session</ejb-ref-type>
   <home>ejbdemo.DemoSessionHome</home>
   <remote>ejbdemo.DemoSession</remote>
</ejb-ref>

サンプル・コードは、次のとおりです。

<%@ page import="ejbdemo.*" %> 
<%@ taglib uri="http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/ejbtaglib.tld"
           prefix="ejb" %> 
<html> 
<head> <title>Use EJB from JSP</title> </head> 
<body> 

<ejb:useHome id="home" type="ejbdemo.DemoSessionHome"
             location="java:comp/env/ejb/DemoSession" /> 
<ejb:useBean id="demo" type="ejbdemo.DemoSession" scope="session" > 
    <ejb:createBean instance="<%=home.create()%>" /> 
</ejb:useBean> 
<heading2>      Enterprise Java Bean:  </heading2> 
 <p><b> My name is "<%=demo.getName()%>". </b></p> 
</body> 
</html> 

このサンプル・コードによって、次の内容が実行されます。

EJBタグのエンティティBeanの例

この例は、アプリケーションのweb.xmlファイルの次の構成に依存します。

<ejb-ref>
   <ejb-ref-name>ejb/DemoEntity</ejb-ref-name>
   <ejb-ref-type>Entity</ejb-ref-type>
   <home>ejbdemo.DemoEntityHome</home>
   <remote>ejbdemo.DemoEntity</remote>
</ejb-ref>

サンプル・コードは、次のとおりです。

<%@ page import="ejbdemo.*" %> 
<%@ taglib uri="http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/ejbtaglib.tld"
           prefix="ejb" %> 
<html> 
<head> <title>Iterate over EJBs from JSP</title> </head> 
<body> 

<ejb:useHome id="home" type="ejbdemo.DemoEntityHome"
             location="java:comp/env/ejb/DemoEntity" /> 
<% int i=0; %> 
<ejb:iterate id="demo" type="ejbdemo.DemoEntity"
             collection="<%=home.findAll()%>" max="3" > 
<li> <heading2> Bean #<%=++i%>:  </heading2> 
 <b> My name is "<%=demo.getName()+"_"+ demo.getId()%>". </b> </li> 
</ejb:iterate> 
</body> 
</html> 

このサンプル・コードによって、次の内容が実行されます。

一般的なユーティリティ・タグ

OC4Jには、多様な操作を実行するその他のユーティリティ・タグが多数あります。次の各項ではタグの詳細を説明します。

ユーティリティ・タグを使用する場合は、次の要件に注意してください。

taglibディレクティブ、予約済のタグ・ライブラリ・ディレクトリ、TLDファイルおよびuri値の内容の詳細は、『Oracle Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。


注意

  • このタグ構文では、接頭辞「util:」が使用されます。慣例的にこのように表記しますが、必須ではありません。任意の接頭辞をtaglibディレクティブに指定できます。

  • このマニュアルのタグ構文規則の詳細は、「タグ構文の表記と意味」を参照してください。

  • これらのライブラリは、JavaServer Pages標準タグ・ライブラリ(JSTL)より前に開発され、JSTLと重複する機能が含まれています。標準に準拠するために、原則として、JSTLの使用をお薦めします。
    第2章「JavaServer Pages標準タグ・ライブラリのサポート」を参照してください。

    JSTLで使用できないカスタム・ライブラリの機能のうち、有効と判断される機能は、必要に応じて、JSTL標準に採用される予定です。

 

Displayタグ

次の各項では、displayタグの構文と属性について説明します。

displayCurrencyユーティリティ・タグ

指定した金額を、ロケールに適切な通貨として書式化して表示します。ロケールを指定しないと、requestオブジェクトがロケールのかわりに検索されます。オブジェクトが検出されない場合は、システムのデフォルトのロケールが使用されます。

構文

<util:displayCurrency amount = "<%=Double%>"
                    [ locale = "<%=Locale%>" ] />

このタグは、ボディを使用しません。

属性

<util:displayCurrency amount="<%=account.getBalance()%>"
                      locale="<%=account.getLocale()%>" />

displayDateユーティリティ・タグ

指定した日付をロケールに適した書式で表示します。ロケールを指定しない場合は、システムのデフォルトのロケールが使用されます。

構文

<util:displayDate date = "<%=Date%>" 
                [ locale = "<%=Locale%>" ] />

このタグは、ボディを使用しません。

属性

<util:displayDate date="<%=account.getDate()%>"
                  locale="<%=account.getLocale()%>" />

displayNumberユーティリティ・タグ

指定した数値をロケールに適した書式および必要に応じて指定した書式で表示します。ロケールを指定しない場合は、システムのデフォルトのロケールが使用されます。

構文

<util:displayNumber number = "<%=Double%>"
                  [ locale = "<%=Locale%>" ]
                  [ format = "<%=Format%>" ] />

このタグは、ボディを使用しません。

属性

<util:displayNumber number="<%=shoe.getSize()%>" />

その他のユーティリティ・タグ

次の各項では、一般的なユーティリティ・タグの構文と属性について説明します。

iterateユーティリティ・タグ

このタグを使用してコレクション間を反復します。開始タグでコレクションを取得し、ボディでそれを反復します。

構文

<util:iterate id = "instance_name" 
              type = "class_name" 
              collection = "<%=Collection%>" 
            [ max = "<%=Integer%>" ] >

... body ...

</util:iterate>

ボディは、コレクション内の各要素について一度評価されます。

属性

<util:iterate id="contact" type="com.acme.connections.Contact"
              collection="<%=company.getContacts()%>" >
     <jsp:getProperty name="contact" property="name"/>
</util:iterate>

ifInRoleユーティリティ・タグ

指定したアプリケーションのロールにユーザーが存在するかどうかに基づいて、タグ・ボディを評価し、JSPページのボディにインクルードします。タグ・ハンドラは、requestオブジェクトのisUserInRole()メソッドを実行します。

ロールの概念はServlet仕様に基づいています。ロールは、アプリケーションのweb.xmlファイルの<role>要素に定義します。

構文

<util:ifInRole role = "<%=String%>" 
             [ include = "true" | "false" ] >

   ... body to include ...

</util:ifInRole>
属性

<util:ifInRole role="users" include="true"> 
     Logged in as <%=request.getRemoteUser()%><br>
     <form action="logout.jsp">
     <input type="submit" value="Log out"><br>
     </form> 
</util:ifInRole>
<util:ifInRole role="users" include="false"> 
     <form method="POST">
     Username: <input name="j_username" type="text"><br>
     Password: <input name="j_password" type="password"><br>
     <input type="submit" value="Log in">
     </form>
</util:ifInRole> 

lastModifiedユーティリティ・タグ

現行のファイルの最終変更日付を、ロケールに適切な書式で表示します。ロケールを指定しないと、requestオブジェクトがロケールのかわりに検索されます。オブジェクトが検出されない場合は、システムのデフォルトのロケールが使用されます。

構文

<util:lastModified 
             [ locale = "<%=Locale%>" ] />

このタグは、ボディを使用しません。

属性

<util:lastModified />

戻る 次へ
Oracle
Copyright © 2002, 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引