Webcoordinatorでは、セションを明示的に開始または破棄することが可能です。
アプリケーション起動時のセション自動開始設定
アプリケーション起動時にセションを自動的に開始するかどうかを初期化パラメタuji.session.manualControlで設定します。セションを明示的に開始または破棄する場合は、初期化パラメタuji.session.manualControlにtrueを指定します。初期化パラメタuji.session.manualControlの指定方法の詳細は、“13.2 初期化パラメタ”を参照してください。
<context-param> <param-name>uji.session.manualControl</param-name> <param-value>true</param-value> </context-param>
セション開始前または破棄後に表示する画面の作成
セション開始前または破棄後に表示する制御ページおよび入出力ページは次のように作成します。
<%@ page session="false"%>を記述します。
“セション開始前または破棄後に表示する画面で使用可能なUJIタグ一覧”に示したUJIタグを使用します。
uji:formタグを使用している場合、uji:formタグのbeanClsアトリビュートを記述します。
HTMLのFORMタグを使用している場合、リクエストパラメタuji.beanを記述します。
データBeanは、com.fujitsu.uji.DataBeanクラスを継承して作成します。XML連携機能は利用できません。
<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は、初回利用時に読み込まれます。アプリケーション動作中の動的変更はできません。