ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

17.1.7 セションの明示的な開始と破棄

Webcoordinatorでは、セションを明示的に開始または破棄することが可能です。

アプリケーション起動時のセション自動開始設定

アプリケーション起動時にセションを自動的に開始するかどうかを初期化パラメタuji.session.manualControlで設定します。セションを明示的に開始または破棄する場合は、初期化パラメタuji.session.manualControlにtrueを指定します。初期化パラメタuji.session.manualControlの指定方法の詳細は、“13.3 初期化パラメタ”を参照してください。

    <context-param>
     <param-name>uji.session.manualControl</param-name>
     <param-value>true</param-value>
    </context-param>

セション開始前または破棄後に表示する画面の作成

セション開始前または破棄後に表示する制御ページおよび入出力ページは次のように作成します。

制御ページ
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=shift_jis">
<%@ page contentType= "text/html; charset=shift_jis" %>
<%@ page session="false" %>
<%@ taglib uri="uji-taglib" prefix="uji" %>
<%@ page errorPage="errorPage.jsp" %>
</HEAD>
<BODY>

<uji:dispatch />

<uji:include pane="body" />
</BODY>
</HTML>
入出力ページ
<%@ page contentType="text/html; charset=shift_jis" %>
<%@ page session="false" %>
<%@ taglib uri="uji-taglib" prefix="uji" %>
・・・・・・
<!-- uji:formタグを使用している場合 -->
<uji:form name="mainForm" verbs="ok" beanId="body" beanCls="sample.MyDataBean">
   ・・・・・・
</uji:form>

<!-- HTMLのFORMタグを使用している場合 -->
<form action="main.jsp">
   <input type="hidden" name="uji.bean" value="sample.MyDataBean">
   ・・・・・・
</form>

セション開始前または破棄後に表示する画面で使用可能なUJIタグ一覧

タグ種別

タグ名

機能

基本タグ

uji:dispatch

ビジネスクラスの呼び出し

uji:include

入出力ページの取り込み

uji:includedBody

uji:includeタグと連携した入出力ページの出力

uji:useBean

データBeanに対する名前付け

uji:getProperty

データBeanのプロパティの値を画面に出力

uji:controlState

セション管理

uji:resourceText

リソースファイルに定義した文字列の出力

画面部品タグ

uji:table

データを表形式に展開(*)

uji:tableRenderer

データを表形式に展開する場合の展開形を指定(*)

uji:tree

ツリー構造のデータを展開(*)

uji:treeRenderer

ツリー構造のデータを展開する場合の展開形を指定(*)

uji:list

リスト形式のデータを展開(*)

uji:listRenderer

リスト形式のデータを展開する場合の展開形を指定(*)

uji:switch

条件によって異なる画面を展開

uji:case

条件によって異なる画面を展開する場合の展開形を指定

uji:value

カレントオブジェクトの値(*)

uji:children

画面部品タグの展開形式で下位の構造を展開(*)

クライアントスクリプトタグ

uji:action

HTMLのイベントに対して実行するJavaScriptの記述

uji:validate

HTMLのイベントが発生した時の項目チェックとJavaScriptの実行

uji:form

フォーム

uji:input

クライアントスクリプトの利用(INPUTタグ相当)

uji:textarea

クライアントスクリプトの利用(TEXTAREAタグ相当)

uji:select

クライアントスクリプトの利用(SELECTタグ相当)

コンポーネントタグ

uji:label

ラベル

uji:borderLayout

上下左右に領域を設定するレイアウト

uji:borderLayoutRenderer

uji:borderLayoutの各領域の内容の記述

uji:gridLayout

項目をグリッドに揃えるレイアウト

uji:gridLayoutRenderer

uji:gridLayoutの各領域の内容の記述

uji:tabbedLayout

タブで切り替え可能なレイアウト

uji:tabbedLayoutRenderer

uji:tabbedLayoutRendererの各領域の内容の記述

(*)表やリストなどの繰り返しデータを画面に展開して表示する場合に使用します。ただし、INPUTタグなどの入力項目を作成することはできません。以下に使用例を示します。

<uji:table bean="body" property="table">
    <uji:tableRenderer type="column">
        <TD bgcolor="#EEFFEE"><uji:value/></TD>
    </uji:tableRenderer>
    ....
</uji:table>

セションの開始

セションを開始するには、HttpSessionProfileクラスのopenSessionメソッドを使用します。

    package sample;
    import com.fujitsu.uji.http.HttpSessionProfile;
    import com.fujitsu.uji.SessionStateException;

    public void someMethod(DispatchContext context, sample.MyDataBean dataBean) {
        ...
        context.setResponseBean("body", dataBean);

        HttpSessionProfile sp = (HttpSessionProfile)context.getSessionProfile();
        // セションを開始します。
        try {
            sp.openSession(context);
        } catch (SessionStateException e) {
            // openSessionメソッドで発生した例外
            ...
        }
    }

openSessionメソッドを呼び出すことにより、サーブレットコンテナが管理するセションの情報 (javax.servlet.http.HttpSession) が生成され、セションクラスがセションスコープに格納されます。セションクラスは、セションが開始されるまでリクエストスコープに格納されています。

セションの破棄

セションを破棄するには、HttpSessionProfileクラスのcloseSessionメソッドを使用します。

    package sample;
    import com.fujitsu.uji.http.HttpSessionProfile;
    import com.fujitsu.uji.SessionStateException;

    public void someMethod(DispatchContext context, sample.MyDataBean dataBean) {
        ...
        context.setResponseBean("body", dataBean);

        HttpSessionProfile sp = (HttpSessionProfile)context.getSessionProfile();
        // セションを破棄します。
        try {
            sp.closeSession(context);
        } catch (SessionStateException e) {
            // closeSessionメソッドで発生した例外
            ...
        }
    }

closeSessionメソッドを呼び出すことにより、サーブレットコンテナが管理するセションの情報 (javax.servlet.http.HttpSession) が破棄され、セションスコープに格納されていたセションクラスがリクエストコープに格納されます。

注意

セションを明示的に開始または破棄する場合の注意事項は以下のとおりです。

  • セションの開始時は、セションが開始されていない必要があります。

  • セションの破棄時は、セションが開始されている必要があります。

  • 以下の機能を有効に設定している場合でも、セション開始前、破棄後またはセションタイムアウト後の場合は機能が無効になります。以下の機能は、セションを開始してから破棄するまで、またはセションタイムアウトとなるまでの間で有効となります。

    • HttpControlStateProfileクラスによる二重処理防止機能

    • ページチェック機能

    • リクエストの正当性検証機能

    セション開始前または破棄後に二重処理防止を行いたい場合は、uji:formタグのpostOnceアトリビュートを利用した二重処理防止機能を使用する必要があります。

  • セション開始前、セション破棄後またはセションタイムアウト後に以下の機能を利用することはできません。

    • ウィンドウ制御機能

    • フレーム制御機能

  • セション開始前または破棄後の場合、ビジネスクラスをセションスコープとした(initメソッドがtrueを返すようにプログラムした)場合であってもビジネスクラスはリクエストスコープとなります。

  • セション開始前または破棄後の場合、HttpSessionProfileクラスのgetSessionメソッドはnullを返します。

  • セション開始前または破棄後の場合、uji:useBeanタグのrequestアトリビュートをtrueにした場合でもデータBeanは保持されません。

  • 初期化パラメタuji.session.manualControlは、初回利用時に読み込まれます。アプリケーション動作中の動的変更はできません。