FeaturesPluginsDocs & SupportCommunityPartners

スコープと管理 Bean

このチュートリアルでは、NetBeans IDE の Visual Web JSF アプリケーション開発機能を使用してアプリケーションを作成し、アプリケーションセッション、および要求スコープによってどのようにアプリケーションのオブジェクトを管理するかを示します。スコープとは、Web アプリケーション内でのオブジェクトの可用性 (コンテキスト) およびあらかじめ定められたその寿命です。

このチュートリアルで作成するWeb アプリケーションは、開票にアプリケーションスコープのオブジェクトを使用し、ユーザーがセッションごとに 1 票のみ投票しているかを確認するためにセッションスコープのオブジェクトを使用します。アプリケーションは、要求スコープオブジェクトを使用して、ユーザーが票を送信した時間を表示します。クライアントのブラウザに応答が送信されたあとは、アプリケーションはこの時間の値を必要としないため、時間は要求スコープに保存されます。

予想される所要時間: 45

目次

このページの内容は NetBeans IDE 6.0 および 6.1 が対象です  

このチュートリアルに従うには、次のソフトウェアとリソースが必要です。

ソフトウェアまたはリソース 必須バージョン
NetBeans IDE Web および Java EE の version 6.1 または 6.0
Java Developer Kit (JDK) version 6 または
version 5
JavaServer Faces コンポーネント /
Java EE プラットフォーム
1.2 と Java EE 5* または
1.1 と J2EE 1.4
GlassFish アプリケーションサーバー V2
Travel データベース 任意

* NetBeans IDE の Java EE 5 機能を活用するためには、GlassFish アプリケーションサーバー V2 UR2 などの、Java EE 5 仕様に完全に準拠したアプリケーションサーバーを使用してください。別のサーバーを使用している場合は、「リリースノート」と「FAQ」で既知の問題やその回避策を確認してください。サポートされているサーバーと Java EE プラットフォームについては、「リリースノート」を参照してください。

NetBeans IDE 6.1 を使用している方へ

  • NetBeans 6.1 でプロジェクトを作成すると新しいオプションが含まれますが、これらのオプションはデフォルトのままでかまいません。たとえば、「ライブラリの格納用に専用フォルダを使用」チェックボックスは選択しないままにします。
  • NetBeans IDE 6.1 には、要求時バインド機能があります。コンポーネントに Java コーディングが必要な場合は、Visual Web JSF アプリケーション内のコンポーネントにバインド属性を手動で追加する必要があります。バインド属性を追加するには、各コンポーネントを右クリックし、「バインド属性を追加」を選択します。詳細は、「On-demand Binding Attribute Wiki」を参照してください。

スコープについて

ユーザーが任意のページにとどまっている間は、そのページが再表示されたとき (ユーザーが null を返すボタンをクリックしたときなど) でも、コンポーネントの値は記憶されています。しかし、ユーザーがそのページから離れた場合、コンポーネントの値は消滅します。

ほかのページで値を有効にする、または同じページに戻ったときに値を有効にするには、値を保存する必要があります。IDE からプロジェクトを作成するとき、IDE は値を保存するために、次の 3 つの管理 Beanを作成します。

  • RequestBean1
  • SessionBean1
  • ApplicationBean1

次の図に、デフォルトの管理 Bean を持つ「ナビゲータ」ウィンドウを示します。

デフォルトの管理 Beans

管理 Bean は、JavaServer Faces Web アプリケーションがインスタンス化し、要求スコープ、セッションスコープ、あるいはアプリケーションスコープのいずれかに保存する JavaBeans オブジェクトです。Web アプリケーションは、要求スコープに RequestBean1、セッションスコープに SessionBean1、およびアプリケーションスコープに ApplicationBean1 をそれぞれ保存します。

これらの管理 Bean のいずれかにプロパティーを追加するには、「ナビゲータ」ウィンドウで Bean をダブルクリックし、ソースコードにプロパティー宣言を入力します。Java エディタ内を右クリックし、「リファクタリング」>「フィールドをカプセル化」を選択します。一覧からプロパティーを選択し、追加するメソッドを選択して「リファクタリング」をクリックします。

値を保存するための Bean プロパティーを作成する前に、プロパティーの値に適切なスコープを決める必要があります。同時に複数のユーザーが Web アプリケーションにアクセスできるため、できるだけ小さいスコープを使用して、サーバーのリソースを最大限利用できるようにします。次の図は、それぞれの種類のスコープの維持期間を示しています。

  • アプリケーションスコープは、サーバーがアプリケーションを停止するまで維持します。アプリケーション Bean に保存した値は、すべてのセッション、および同じアプリケーションマップを使用するすべての要求に対して有効です。
  • セッションスコープはユーザーが最初に Web アプリケーションのページにアクセスしたときに開始し、休止状態のためにユーザーのセッションがタイムアウトしたとき、あるいは、Web アプリケーションがセッションを無効にするとき (たとえば session.invalidate() を呼び出すときなど) に終了します。
  • 要求スコープは、ユーザーがページを送信するときに開始し、どのページでも、応答が完全に描画されたときに終了します。
Web アプリケーションのスコープ

たとえば、Web アプリケーションに、測定単位(ピクセル、センチメートル、およびインチ) のドロップダウンリストがあるとします。ApplicationBean1 に選択項目のリストを保存すると、すべての並列ユーザーセッションでそのリストを共有できます。一方、SessionBean1 にユーザーログイン名を保存すると、ユーザーがそのセッション内でアクセスするすべてのページでそのログイン名を有効にできます。現在の要求のライフタイムを越えて情報を使用する必要のない場合は、RequestBean1 にプロパティーを追加することにより、記憶空間を節約することができます。

警告: ナビゲーション規則の <navigation-case> 要素内に <redirect> 要素を含めた場合は、要求 Bean を使用できません。(これらの規則は、ページナビゲーションエディタで「XML」ボタンをクリックすると表示されます)。ページが送信されると、後続のページが要求 Bean に格納された値を使用する前に <redirect> 要素がページをリダイレクトして要求を終了します。

IDE からページを作成すると、ページ Bean の Java ソースコードには、RequestBean1 オブジェクト、SessionBean1 オブジェクト、および ApplicationBean1 オブジェクトにアクセスするためのメソッドが含まれます。これらの管理 Bean のプロパティーにアクセスするには、次のようなコードを使用します。

注: NetBeans IDE 6.1 には要求時バインド機能があります。コンポーネントに Java コーディングが必要な場合は、Visual Web JSF アプリケーション内のコンポーネントにバインド属性を手動で追加する必要があります。バインド属性を追加するには、各コンポーネントを右クリックし、「バインド属性を追加」を選択します。詳細は、「On-demand Binding Attribute Wiki」を参照してください。

コード例 1:アプリケーション Bean プロパティーへのアクセス
ApplicationBean1 appBean = getApplicationBean1();
Option[] choices = appBean.BallotOptions();

はじめてページが管理 Bean のプロパティーにアクセスするときに、Web アプリケーションは、管理 Bean をその Bean スコープ内でインスタンス化します。たとえば、ユーザーが SessionBean1 のプロパティーを参照するページにアクセスするまで、SessionBean1 オブジェクトのインスタンスは、ユーザーのセッションに存在しません。任意のセッションによって初めてページがアプリケーション Bean にアクセスすると、ApplicationBean1 オブジェクトのインスタンスが作成され、Web アプリケーションの実行中は、そのインスタンスが保持されます。

ヒント: その他の管理 Bean を追加するには、

  1. 「プロジェクト」ウィンドウで「ソースパッケージ」ノードを展開し、そのパッケージノードを右クリックします。
  2. 「新規」>「その他」を選択し、「JavaServer Faces」カテゴリを選択して「ファイルの種類」でスコープを選択し、「次へ」をクリックします。
  3. 新しい管理 Bean のファイル名を入力し、「完了」をクリックします。

    新しい管理 Bean は、「プロジェクト」ウィンドウの「ソースパッケージ」ノードの下に表示されます。

管理 Bean へのプロパティーの追加

この Web アプリケーションのページは、この節で作成する、次の値へのアクセスを必要とします。

  • ballotOptions票の選択肢のリストを含む配列プロパティー。リストはすべてのセッションに対し同じままでなければならないので、このプロパティーはアプリケーションスコープに入ります。
  • tallyすべての採決を累積するハッシュマッププロパティー。セッション間で保持する必要があるので、アプリケーションスコープに入ります。
  • hasVotedユーザーが投票したかどうかを追跡する boolean 型プロパティー。アプリケーションは単一セッション内の複数の要求間で値を維持する必要があるので、アプリケーションはセッションスコープに値を保存します。
  • timestampユーザーが票を送信したとき、アプリケーションは次のページに遷移するまで使用時間を記録する Date プロパティー。次のページが表示されたあと、アプリケーションは値を必要としないため、アプリケーションは要求スコープ内に値を保存します。

次の手順を行うことにより、管理 Bean にプロパティーを追加します。

  1. メインメニューから「ファイル」>「新規プロジェクト」を選択します。
  2. 「新規プロジェクト」ウィザードで、「カテゴリ」リストから「Web」を選択し、「プロジェクト」リストから「Web アプリケーション」を選択して、「次へ」をクリックします。
  3. プロジェクトに「Scopes」という名前を付けます。

    NetBeans 6.1 ユーザーへの注意事項: NetBeans 6.1 では、プロジェクトを作成すると新しいオプションが含まれますが、これらのオプションはデフォルトのままでかまいません。たとえば、「ライブラリの格納用に専用フォルダを使用」チェックボックスは選択しないままにします。

  4. NetBeans IDE 6.1 を使用している場合は「次へ」をクリックします。それ以外の場合は手順 5 に進みます。
  5. 「フレームワーク」パネルで、「Visual Web JavaServer Faces」をチェックして「完了」をクリックします。

    Scopes プロジェクトの Page1.jsp がビジュアルデザイナで開きます。
  6. 「ナビゲータ」ウィンドウで、ApplicationBean1 をダブルクリックします。

    ApplicationBean1.java が編集用に開きます。
  7. 次に、アプリケーション Bean プロパティーを追加します。コンストラクタ public class ApplicationBean1 extends AbstractApplicationBean の下に、次の宣言を追加します。
    private Option[] ballotOptions;
    private HashMap tally;
  8. Java エディタを右クリックし、「インポートを修正」を選択します。Option クラスを含む 1 つ以上のパッケージがあるため、「インポートを修正」ダイアログが表示されます。

    • Java EE 5 プロジェクトでは、com.sun.webui.jsf.model.Option を選択します。
    • J2EE 1.4 プロジェクトでは、com.sun.rave.web.ui.model.Option を選択します。
  9. Java エディタを右クリックし、「リファクタリング」>「フィールドをカプセル化」を選択します。
  10. 「フィールドをカプセル化」ダイアログで、次の図に示すように「ballotOptions」プロパティーと「tally」プロパティーの両方に取得メソッドと設定メソッドを作成するボックスを選択します。

    「フィールドをカプセル化」ダイアログ
  11. init メソッドまでスクロールし、メソッドの末尾に次の太字のコードを追加します。

    コード例 2: アプリケーション Bean の init メソッドに追加するコード
            // TODO - add your own initialization code here
            // 票項目を投入する
            ballotOptions = new Option[] {
                new Option("java", "Java プログラミング言語"),
                new Option("cpp", "C++"),
                new Option("fortran", "Fortran")
            };
    
            // 票選択のカウンタを初期化する
            tally = new HashMap();
            for (int i=0; i < ballotOptions.length; i++) {
                this.tally.put(ballotOptions[i].getValue(), "0");
            }
  12. ファイルの末尾、最後の終了中括弧の直前に、次のメソッドを追加します。

    コード例 3:アプリケーション Bean 票集計 メソッド
        /**
         * プロパティー tally の票集計。
         */
        public void incrementTallyFor(String category) {
            int count = getTallyFor(category);
            count++;
            this.tally.put(category, Integer.toString(count));
        }
    
        /**
         * プロパティー tally の値の取得メソッド。
         * @param カテゴリ HashMap キー
         * @return 指定されたキーがマップされる値
         */
        public int getTallyFor(String category) {
            String stringCount = (String) this.tally.get(category);
            if (stringCount == null) {
                return 0;
            } else {
                int count = Integer.valueOf(stringCount).intValue();
                return count;
            }
        }
    
  13. Ctrl-S キーを押して、変更を保存したあと、Ctrl-F4 キーを押して、ファイルを閉じます。
  14. 「ナビゲータ」ウィンドウで、SessionBean1 をダブルクリックします。SessionBean1.java が編集用に開きます。

    注: 「ナビゲータ」ウィンドウが開いていない場合は、編集領域にある「Page1」タブをクリックし、編集ツールバーにある「デザイン」をクリックします。IDE がデザインモードの場合、「ナビゲータ」ウィンドウが表示されます。
  15. 次に、セッション Bean プロパティーを追加します。コンストラクタ public class SessionBean1 extends AbstractSessionBean の下に、次の宣言を追加します。
    private boolean hasVoted;
  16. Java エディタを右クリックし、「リファクタリング」>「フィールドをカプセル化」を選択します。
  17. 「フィールドをカプセル化」ダイアログで、「hasVoted」プロパティーに取得メソッドと設定メソッドの両方を作成するボックスを選択して、「リファクタリング」をクリックします。
  18. init メソッドまでスクロールし、メソッドの末尾に次の太字のコードを追加します。

    コード例 4: セッション Bean の init メソッドに追加するコード
            // TODO - add your own initialization code here
            setHasVoted(false);
  19. Ctrl-S キーを押して、変更を保存したあと、Ctrl-F4 キーを押して、ファイルを閉じます。
  20. 「ナビゲータ」ウィンドウで、RequestBean1 をダブルクリックします。RequestBean1.java が編集用に開きます。
  21. 要求 Bean プロパティーを追加します。コンストラクタ public class RequestBean1 extends AbstractRequestBean の下に、次の宣言を追加します。
    private java.util.Date timestamp;
  22. Java エディタを右クリックし、「リファクタリング」>「フィールドをカプセル化」を選択します。
  23. 「フィールドをカプセル化」ダイアログで、「timestamp」プロパティーに取得メソッドと設定メソッドの両方を作成するボックスを選択して、「リファクタリング」をクリックします。
  24. Page1 タブをクリックして、Page1 の「デザイン」ボタンをクリックします。「ナビゲータ」ウィンドウを確認し、要求 Bean 、セッション Bean、およびアプリケーション Bean のプロパティーが次の図に一致することを確認します。

    要求 Bean、セッション Bean、およびアプリケーション Bean のプロパティー

開始ページの作成

この節の手順に従って、次の図に示すブラウザで実行されているようなページを作成します。ユーザーが「票を送信」ボタンをクリックした場合、ページはユーザーの票を送信します。ユーザーが 1 度投票を行うと、ボタンは無効になり、ユーザーがそのセッションで再度投票できなくなります。

図 5: Page1

注: NetBeans IDE 6.1 には要求時バインド機能があります。コンポーネントに Java コーディングが必要な場合は、Visual Web JSF アプリケーション内のコンポーネントにバインド属性を手動で追加する必要があります。バインド属性を追加するには、各コンポーネントを右クリックし、「バインド属性を追加」を選択します。詳細は、「On-demand Binding Attribute Wiki」を参照してください。

  1. 編集用ツールバーの「Page1」をクリックします。
  2. 「パレット」の「基本」セクションから「ラベル」コンポーネントをドラッグし、ページ上部の中央にドロップして、ラベルのテキストを、「読者投票: 好きなプログラミング言語は何ですか?」に設定します。
  3. 「ラジオボタングループ」コンポーネントを「ラベル」コンポーネントの下にドロップします。
  4. 「プロパティー」ウィンドウで、コンポーネントの「id」プロパティーを「voteRBGroup」に設定します。
  5. 「ラジオボタングループ」コンポーネントを右クリックし、ポップアップメニューから「データにバインド」を選択します。

    「データにバインド」ダイアログが表示されます。
  6. ダイアログの「オブジェクトにバインド」タブで、「ApplicationBean1」>「ballotOptions」を選択し、「了解」をクリックします。
  7. 「ラジオボタングループ」コンポーネントの下に「ボタン」をドロップし、そのテキストを「結果を表示」に設定します。

    注: IE 7 では、JSF 1.2 の「ボタン」コンポーネントの幅に影響する既知の問題があります。問題を回避するには、「ボタン」コンポーネントをレイアウトコンポーネント (グリッドパネル、グループパネル、またはレイアウトパネル) 内に配置します。レイアウトコンポーネントのサイズを変更すると、「ボタン」コンポーネントのサイズが自動的に変更されます。

  8. 「プロパティー」ウィンドウで、「id」プロパティーを「viewButton」に設定します。
  9. action」プロパティーの省略符号ボタン (省略符号ボタン) をクリックし、ドロップダウンリストから「viewButton_action」を選択し、「了解」をクリックします。

    IDE は null を返す viewButton_action イベントハンドラを追加します。
  10. 「ボタン」コンポーネントを、「結果を表示」ボタンの右にドロップし、そのテキストを「票を送信」に設定します。
  11. 「プロパティー」ウィンドウで、「id」プロパティーを「voteButton」に設定します。
  12. disabled」プロパティーの省略符号ボタン (省略符号ボタン) をクリックします。

    そのプロパティーの「プロパティーのバインド」ダイアログが開きます。
  13. ダイアログで、「バインドを使用」を選択して「オブジェクトにバインド」タブをクリックし、次の図に示すように「SessionBean1」>「hasVoted」を選択してから、「了解」をクリックします。

    「disabled」プロパティーのバインド
  14. 「票を送信」ボタンをダブルクリックします。

    IDE は、voteButton_action イベントハンドラを追加し、ページの Java ソースを開いて、そのメソッドを表示します。
  15. メソッドの本体を次のコード (太字部分) に置き換えます。

    コード例 5: voteButton_action メソッド
        public String voteButton_action() {
    
            if (voteRBGroup.getSelected() == null) {
                return null;
            }
    
            // 票集計は、すべてのユーザーセッション間で保持されます
            String votedFor = voteRBGroup.getSelected().toString();
            getApplicationBean1().incrementTallyFor(votedFor);
    
            // ユーザーは、1 セッションにつき 1 票、投票できます
            getSessionBean1().setHasVoted(true);
    
            // 次の要求が終了したあと、timestamp は必要ありません
            Date now = new Date();
            getRequestBean1().setTimestamp(now);
    
            return null;
        }
  16. ソース内で右クリックし、ポップアップメニューから「インポートを修正」を選択します。
  17. 「日付」ドロップダウンリストから、「java.util.Date」を選択し、「了解」をクリックします。

結果ページの作成

次の手順に従って、次の図に示すブラウザで実行されているようなページを作成します。このページは、現在の票集計を表示しています。「結果を再表示」ボタンをクリックして、ページが最後に表示されてからほかのユーザーが送信した票を含む、最新の票集計を取得することができます。

結果

注: NetBeans IDE 6.1 には要求時バインド機能があります。コンポーネントに Java コーディングが必要な場合は、Visual Web JSF アプリケーション内のコンポーネントにバインド属性を手動で追加する必要があります。バインド属性を追加するには、各コンポーネントを右クリックし、「バインド属性を追加」を選択します。詳細は、「On-demand Binding Attribute Wiki」を参照してください。

  1. 「プロジェクト」ウィンドウで、「Scopes」プロジェクトの下の「Web ページ」ノードを右クリックし、「新規」>「Visual Web JSF ページ」を選択します。ページに「Results」という名前をつけ、「完了」をクリックしてページを作成します。
  2. 「ラベル」コンポーネントを Results ページ上部の中央にドロップし、テキストを「結果」に設定します。
  3. 「ボタン」コンポーネントを「ラベル」コンポーネントの左にドロップし、そのテキストを「ホーム」に設定します。
  4. ボタンの「id」プロパティーを「homeButton」に設定します。
  5. action」プロパティーの省略符号ボタン (省略符号ボタン) をクリックし、「ハンドラ」ドロップダウンリストから「homeButton_action」を選択し、「了解」をクリックします。
  6. 「ボタン」コンポーネントを「ラベル」コンポーネントの右にドロップし、そのテキストを「結果を再表示」に設定します。
  7. ボタンコンポーネントの「id」プロパティーを「refreshButton」に設定します。
  8. action」プロパティーの省略符号ボタン (省略符号ボタン) をクリックし、「ハンドラ」ドロップダウンリストから「refreshButton_action」を選択し、「了解」をクリックします。
  9. 「パレット」の「レイアウト」セクションから、「グリッドパネル」コンポーネントをドラッグし、「ラベル」コンポーネントの下にドロップします。
  10. 「プロパティー」ウィンドウで、「cellspacing」プロパティーを「10」に設定し、「columns」プロパティーを「1」に設定します。
  11. 「静的テキスト」コンポーネントを「グリッドレイアウト」コンポーネント内にドラッグします。「グリッドレイアウト」コンポーネントの輪郭が、青の実線になったら、次の図に示すように、「静的テキスト」コンポーネントをドロップします。

    「グリッドパネル」コンポーネントへのコンポーネントのドロップ
  12. 「プロパティー」ウィンドウで、「静的テキスト」コンポーネントの「id」プロパティーを「resultsST」に設定します。「text」プロパティーは空白のままにします。
  13. escape」プロパティーのチェックボックスの選択を解除します。

    あとで、コンポーネントの「text」プロパティーに HTML を配置するコードを追加します。「escape」プロパティーを False に設定することで、HTML コードがそのままブラウザに渡されるようになります。
  14. 別の「静的テキスト」コンポーネントを「グリッドパネル」コンポーネントの上にドラッグし、「グリッドレイアウト」コンポーネントの輪郭が青の実線になったら、「静的テキスト」コンポーネントをドロップします。
  15. 「静的テキスト」コンポーネントの「id」プロパティーを「messageST」に設定します。「text」プロパティーは空白のままにします。
  16. 編集用ツールバーの「Java」をクリックして、ページのJava ソースを表示します。
  17. 「ナビゲータ」ウィンドウで、prerender メソッドをダブルクリックして Java エディタで開き、次の太字のコードを追加します。

    コード例 6: prerender メソッド
        public void prerender() {
          // 最新の投票結果を表示する
          ApplicationBean1 appBean = getApplicationBean1();
          Option[] choices = appBean.getBallotOptions();
          String str = "<table border=\"0\" cellpadding=\"5\">";
          for (int i = 0; i < choices.length; i++) {
            int count =
              appBean.getTallyFor(choices[i].getValue().toString());
            str = str + "<tr><td>" +
              choices[i].getLabel() +
              "</td><td>" +
              count +
              "</td></tr>";
          }
          str = str + "</table>";
          resultsST.setText(str);
    
          RequestBean1 reqBean = getRequestBean1();
          Date timestamp = (Date) reqBean.getTimestamp();
          if (timestamp != null) {
            messageST.setText("投票した時間 " +
              (String)DateFormat.getTimeInstance(DateFormat.LONG).format(
              timestamp));
          }
        }

    このコードは、各票の票集計を含む HTML 表を作成し、最初の「静的テキスト」コンポーネントの「 text 」プロパティーに HTML 表を配置します。ユーザーが投票すると、票が登録された日時が 2 番目の「静的テキスト」コンポーネントに表示されます。
  18. ソース内で右クリックし、ポップアップメニューから「インポートを修正」を選択します。
  19. 「Date」ドロップダウンリストから「java.util.Date」を選択します。
  20. プロジェクトで使用している Java EE のバージョンに応じて、「Option」ドロップダウンリストから選択します。

    • Java EE 5 プロジェクトでは、com.sun.webui.jsf.model.Option を選択します。
    • J2EE 1.4 プロジェクトでは、com.sun.rave.web.ui.model.Option を選択します。

ページナビゲーションの指定

次の手順に従って、次の図に示すように、ボタンにページナビゲーションを指定します。

ページフローエディタ
  1. 編集領域で、「Results」タブをクリックし、「デザイン」をクリックして、ビジュアルデザイナのページを表示します。
  2. ページの空白の部分を右クリックし、ポップアップメニューから「ページナビゲーション」を選択します。

    ページフローエディタに faces-config.xml が表示されます。
  3. Page1.jsp アイコンの + 印をクリックして、アイコンを拡大します。
  4. クリックして viewButton から Results.jsp へドラッグし、ボタンと結果ページ間にコネクタを作成します。
  5. コネクタのラベルをダブルクリックして編集モードに変更し、「view results」と入力して Enter キーを押します。
  6. クリックして voteButton から Results.jsp へドラッグします。
  7. コネクタのラベルをダブルクリックして編集モードに変更し、「vote」と入力して Enter キーを押します。
  8. Results.jsp アイコンの + 印をクリックして、アイコンを拡大します。
  9. クリックして homeButton から Page1.jsp へドラッグします。
  10. コネクタのラベルをダブルクリックして編集モードに変更し、「home」と入力して Enter キーを押します。

アプリケーションの実行

同じブラウザから複数のセッションを利用可能にするには、休止状態が 1 分間続いたあと、各セッションを終了するように、アプリケーションを設定します。そして、アプリケーションを配備し、実行します。

  1. 「ファイル」ウィンドウで、次の図に示すように、「Scopes」>「web」>「WEB-INF」を展開します。

    強調表示された web.xml ファイルが表示されている「ファイル」ウィンドウで
  2. web.xml をダブルクリックし、エディタでそのファイルを開きます。
  3. 次の図に示すように、「セッションタイムアウト」テキストボックスに「1」と入力します。

    web.xml のビジュアルエディタでのセッションタイムアウトの設定
  4. ファイルを保存して閉じます。
  5. メインツールバーにある「主プロジェクトを実行」ボタン 「プロジェクトを実行」ツールバーアイコン をクリックします。
  6. 開始ページが表示されたら、ラジオボタンを選択し、「票を送信」をクリックします。

    ブラウザに結果ページが表示されます。結果ページは票を送信した時間を表示します。
  7. 「ホーム」ボタンをクリックして開始ページに戻ります。

    投票を終えたので、「票を送信」ボタンは無効になります。
  8. 「結果を表示」ボタンをクリックします。

    結果ページは投票した時間を表示しなくなります。これは、前の要求 Bean がスコープ外にあり、新しい要求 Bean がインスタンス化されたためです。
  9. セッションがタイムアウトするまで、1 分間待ちます。そして、ブラウザのアドレステキストボックスに、「http://localhost:8080/Scopes」と入力し、Enter キーを押して新しいセッションを開始します。デフォルトのサーバー構成を使用していない場合は、8080 を異なるポートに変更する必要がある場合があります。
  10. 再度投票を行い、結果を確認します。結果には、最初の投票が含まれています。
  11. 別のブラウザを使用できる場合は、ブラウザを開始し、ブラウザのアドレステキストフィールドに「http://localhost:8080/Scopes」と入力して、Enter キーを押します。票を送信します。
  12. 最初のブラウザで、結果ページから「結果を再表示」をクリックします。

    結果には、2 番目のブラウザから送信した票が含まれています。

その他の可能な操作

このチュートリアルの手順を使用して、ログイン名の入力を求めるアプリケーションを構築してみましょう。Web アプリケーションにアクセスした一意のユーザーの数を表示するページも追加してみてください。

まとめ

情報を保存してほかのページで使用するには、アプリケーション Bean、セッション Bean、および要求 Bean を使用します。

  • アプリケーション Bean は、「ドロップダウンリスト」コンポーネントの静的なオプションリストなど、すべてのユーザーセッションに適用される情報に使用します。
  • セッション Bean は、ユーザーのログイン名など、ユーザーのセッション中にほかのページで使用する情報を保存するために使用します。
  • 次のページで使用する情報を保存するだけの場合は、要求 Bean を使用します。

    注: ナビゲーション規則の <navigation-case> 要素内に <redirect> 要素を含めた場合は、要求 Bean を使用できません。

  • 要求 Bean、セッション Bean、あるいはアプリケーション Bean は、ページがプロパティーにアクセスするとすぐにインスタンス化されます。Bean はスコープが終了するときに破棄されます。
  • セッション Bean にプロパティーを追加するには、「アウトライン」ウィンドウでセッション Bean ノードを右クリックし、「追加」>「プロパティー」を選択します。要求 Bean やアプリケーション Bean にプロパティーを追加する場合も、同様の手順に従います。

関連項目


更新日: 2008 年 4 月 15 日



Bookmark this page

del.icio.us furl simpy slashdot technorati digg
Companion
Projects:
MySQL Database Server   Open JDK: an Open SourceJDK   GlassFish Community: an Open Source Application Server    Mobile & Embedded Community    Open Solaris   java.net - The Source for Java Technology Collaboration   Virtual Box - full virtualizer  Open ESB - The Open Enterprise Service Bus Powered by