JSP 2.0,2.1 JSP ページ ISO-8859-1
3.3 JSF および JSTL の機能
この節では,JSF および JSTL の機能について説明します。
JSF および JSTL を使った Web アプリケーションでの処理の流れを次の図に示します。
図 3‒1 JSF および JSTL を使った Web アプリケーションでの処理の流れ
• クライアントから JSF アプリケーションを使用した Web ページにアクセスすると,リクエストが JSF フレームワーク内のサーブレット FacesServlet に渡ります。FacesServlet を起点として JSF アプリ ケーションの処理が始まり,JSF フレームワークの JSFCore からユーザが定義したクラスやページの処 理が実行されます。リクエストを処理した結果はレスポンスとして FacesServlet を介してクライアン トへ返されます。
• クライアントから JSTL を使用した Web ページにアクセスすると,JSTL ライブラリが Web ページで 使用しているタグに対応した処理を実行します。処理した結果はレスポンスとしてクライアントへ返 されます。
3.3.1 JSF の機能
ここでは,JSF の機能について説明します。
(1) JSF の基本機能
JSF を利用した Web アプリケーションの開発では,アクセスページビューの定義,ページの再利用,クラ イアントからの入力値の型の変換やバリデーション,アプリケーション内でのイベントの制御など,いろい ろな機能を利用できます。
JSF の機能の多くは,ManagedBean と EL 式を利用して実現します。
ManagedBeanとは,JSP および Facelets ページで使用するデータとメソッドを定義する JavaBean のこ とです。ManagedBean の詳細については,JSF の仕様を参照してください。
EL 式とは,規定の形式で記述することで,ManagedBean に定義したプロパティやメソッドを JSF タグの 属性と関連づけることができる機能です。EL 式は JSP の仕様の一部です。詳細は,JSP の仕様を参照して ください。
(2) アプリケーションサーバでの JSF の動作
アプリケーションサーバでの JSF の動作を次に示します。
• ValueChangeListener,ActionListener,AjaxBehaviorListener,ComponentSystemEventListener として動作するメソッドを EL 式で指定した場合に,同じメソッド名で引数あり,引数なしが存在する と,引数ありのメソッドだけが呼ばれます。
• <f:facet>タグの中に複数のコンポーネントがある場合,JSP ページでは,最初に記述されているコン ポーネントが処理されますが,Facelets ページでは,記述されているすべてのコンポーネントが処理さ れます。
• <f:subview>タグが<f:view>タグの外に記述された場合,JSP ページでは,<f:view>の値が
<f:subview>の値に上書きされます。Facelets ページでは,<f:view>の値は変わらず,<f:view>お よび<f:subview>が一緒に表示されます。
• <f:ajax>タグを利用する場合,<h:head>タグを記述しなければいけません。記述しないと,<f:ajax>
が動作しません。
• イベントの処理に valueChangeListener 属性または<f:valueChangeListener>タグを利用する場合 に,<h:inputText>タグの value 属性に ValueExpression を,scope 属性に RequestScoped を設定 した場合,入力値を変更しなくても,valueChangeListener のメソッドが実行されます。
• ユーザアプリケーションが"csfcfc"という Cookie を登録し,Facelets に Flash オブジェクトを利用し て繰り返しリクエストをした場合,Flash オブジェクトのデータの読み込みが失敗して,例外処理
(NullPointerException)が発生します。
• <ui:repeat>タグの繰り返し回数は,size 属性に設定された値より 1 回多くなります。
• ブラウザの仕様によって,一部のタグの属性が無効になるおそれがあります。ブラウザの仕様をご確認 ください。
• <composite:attribute>タグ,<composite:facet>タグ,<composite:insertFacet>タグ,
<composite:renderFacet>タグの requierd 属性を有効にする場合は,コンテキストパラメタ javax.faces.PROJECT_STAGE の値を Development に設定してください。
• コンテキストパラメタ javax.faces.FACELETS_REFRESH_PERIOD の指定値は,Facelets ページへ の最新のリクエストを受けてから Facelets ファイルの更新を確認するまでの時間になります。そのた め,短時間のうちに多くのリクエストが送られる環境では,最新のリクエストに合わせて更新の確認ま での時間が延長されてしまい,Facelets ファイルの更新が反映されない状態が続くおそれがあります。
• アプリケーションサーバでは,Bean Validation の機能は常に有効になります。Bean Validation の機 能を無効にする方法は,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機 能)」の「10.5.1 JSF から Bean Validation の利用手順」を参照してください。
• <f:attribute>タグで値を指定する対象として,文字列(java.lang.String 型)を指定値とする属性を指 定してください。
• JSF アプリケーションのクライアント画面からの POST データに含まれるリクエストのパラメタ数は,
使用する JSF タグの種類や使用方法によって異なります。
webserver.connector.limit.max_parameter_count キーでリクエストパラメタ数の上限値を設定する 場合は,本番環境と同等の環境で実際の JSF アプリケーションを使用して検証することをお勧めしま す。
• アプリケーションの JAR ファイル内の META-INF/resources のリソースを更新した場合,リロード時 に KDJE39556-W のメッセージが出力されます。この状態で JSF からリソースにアクセスした場合,
更新したリソースが取得できます。
3.3.2 JSTL の機能
JSTL では,ページにタグを定義することで,アプリケーションで共通に使用する処理を実行できます。
JSTL には,値の設定,条件分岐,データベースへのアクセス,国際化,XML 解析などに関するタグが含 まれています。
3.3.3 アプリケーションサーバ独自の機能
JSF または JSTL で利用できるアプリケーションサーバ独自の機能を次の表に示します。
表 3‒2 アプリケーションサーバ独自の機能
項番 機能 説明
1 ログの出力 実行時の情報をログファイルに記録する機能です。
2 性能解析トレースの出力 特定の機能(メソッド)の開始と終了をファイルにトレースする機能です。
この情報を使って,システム性能およびボトルネックを分析できます。性 能解析トレースの出力の詳細については,マニュアル「アプリケーション サーバ 機能解説 保守/移行編」の「7. 性能解析トレースを使用した性 能解析」を参照してください。
3.3.4 アプリケーションサーバのほかの機能との関連
ここでは,JSF および JSTL とアプリケーションサーバのほかの機能との関連について説明します。
JSF または JSTL とあわせて利用する場合に,留意する必要がある機能を次の表に示します。
表 3‒3 JSF または JSTL と合わせて利用する場合に留意する必要がある機能
項番 機能 機能についての参照先
1 明示管理ヒープ機能 マニュアル「機能解説 拡張編」の
「8. 明示管理ヒープ機能を使用し たフルガーベージコレクションの 抑止」
2 セッションフェイルオーバ機能 マニュアル「機能解説 拡張編」の
「5.2 セッションフェイルオーバ 機能の概要」
3 リデプロイ機能とリロード機能 マニュアル「機能解説 基本・開発
編(コンテナ共通機能)」の「13.
J2EE アプリケーションの形式とデ プロイ」
4 JSP 事前コンパイル機能 「2.5 JSP 事前コンパイル機能と
コンパイル結果の保持」
項番 機能 機能についての参照先 5 J2EE リソースへの別名付与(ユーザ指定名前空間機能) マニュアル「機能解説 基本・開発
編(コンテナ共通機能)」の「2.
ネーミング管理」
注 マニュアル名の「アプリケーションサーバ」は省略しています。
以降,JSF および JSTL と各機能との関連について説明します。
(1) 明示管理ヒープ機能
JSF では,ユーザが作成した Facelets ファイルや JSP ファイルを基に生成された次の情報およびオブジェ クトを,HTTP セッションに登録します。
• HTML ページの画面の情報(ビューの状態)
• SessionScope を定義した ManagedBean クラスのオブジェクト
これらの情報およびオブジェクトは,ほかの Web アプリケーションと同様に,明示管理ヒープ機能を使用 して管理できます。
ただし,情報およびオブジェクトが HTTP セッションに登録されるかどうかには条件があります。また,
HTTP セッションに登録されるすべての情報が明示管理ヒープを使用して管理されるわけではありませ ん。HTTP セッションに情報またはオブジェクトが登録される条件と,それらの情報またはオブジェクト が明示管理ヒープ機能を使用して管理されるかどうかを次の表に示します。
表 3‒4 HTTP セッションに情報またはオブジェクトが登録される条件
情報またはオブジェクト HTTP セッションに登録される条件
明示管理ヒープ機能 を使用して管理され
るかどうか UIComponent のビュー情報(テキスト
フィールド,ラジオボタン,サブミットボ タンなどのユーザとの入出力インター フェースを構成するビューの情報)
JSF 標準コンテキストパラメタの
javax.faces.STATE_SAVING_METHOD の値が
「server」(デフォルト値)の場合
使用しない
ManagedBean オブジェクト SessionScope アノテーションが指定された場合,ま たは faces-config.xml の<managed-bean-scope>
に「session」を指定した場合
使用する
ページで使用する文字コード HTTP セッションが生成されていた場合 使用する
SessionMap に登録したオブジェクト ユーザアプリケーションで使用した場合 使用する
また,明示管理ヒープ機能を使用する場合,JSF アプリケーションが明示管理ヒープ領域で使用するメモリ サイズの概算は,次の式を使用して算出してください。
JSF アプリケーションが明示管理ヒープ領域で使用するメモリサイズ 1セッション当たりで明示管理ヒープ領域を使用するサイズ
=(A※+1) × 0.4キロバイト
+ManagedBeanオブジェクトサイズ(HTTPセッションに登録される場合)
+SeesionMapに登録した場合のオブジェクトサイズ
注※ A は JSF の論理ページの最大値を設定するプロパティ
(com.sun.faces.numberOfLogicalViews)に指定した値です。デフォルトは 15 です。