エンタープライズアプリケーション II 第10回 / 2006年7月23日

Slides:



Advertisements
Similar presentations
年度 J2EE II 稚内北星学園大学 情報メディア学部 専任講師 安藤 友晴. 2 この講義の位置づけ 3年前期の「データベース論 (J2EE I) 」に続く講義。 「データベース論」の講義内容を理解 していることが前提。
Advertisements

1 JSP の作成 JSF による Web アプリケーション 開発 第 4 回. 2 ここでの内容 JSF での JSP の作り方と動かし方につい て学ぶ。
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 22 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授、菅沼明 准教授等による以前の講義資料をもとにしています。
OWL-Sを用いたWebアプリケーションの検査と生成
2004年度 サマースクール in 稚内 JSFによるWebアプリケーション開発
バリデータ J2EE II 第11回 / 2006年1月19日.
JPAを利用した RESTful Webサービスの開発
Struts1.xの脆弱性(CVE ) に対するSDEの対処:推奨タイプ (サンプルソースコードの公開)
JSFによるWebアプリケーション開発 第9回
Struts1.xの脆弱性(CVE ) に対するSDEの対処:wrapタイプ (パッチのご提供)
コントロールパネル ◎コントロール パネル: コンピュータのさまざまな機能を設定するための画面
JSFによるWebアプリケーション開発 第11回
Servlet J2EE I 第8回 /
アプレット (Applet)について.
WSDL と JAX-RPC 年10月13日 Webサービス II (第3回) WSDL と JAX-RPC 年10月13日.
JavaServlet&JSP入門 01K0018 中村太一.
稚内北星学園大学 情報メディア学部 助教授 安藤 友晴
PHP 実用的なサンプル 浅川 和久 2017/3/18 PHP 実用的なサンプル.
卒研:データベースチーム 第4回 DOMを使った処理
Web App Semi 2008 #1 Web App Semi 2008 #1.
セッション管理 J2EE I 第9回 /
ビューとコントローラ.
HTTPプロトコルとJSP (1) データベース論 第3回.
JQueryでAjax 藤田@ジャストプレイヤー ※参考しまくり文献 jQuery日本語リファレンス.
Curlの仕組み.
タグライブラリとJSP J2EE II 第2回 2004年10月7日 (木).
JavaBeans とJSP データベース論 第5回.
JSFによるWebアプリケーション開発 第6回
HTTPプロトコル J2EE I 第7回 /
エンタープライズアプリケーション II 第7回 / 2006年7月9日
Day3 Day4 Day3 Day4.
WSDL と JAX-RPC 年10月20日 Webサービス II (第4回) WSDL と JAX-RPC 年10月20日.
JSPの作成 J2EE II 第3回 2005年4月10日.
ネットワークプログラミング論 平成28年12月12日 森田 彦.
Javaによる Webアプリケーション入門 第9回
Javaによる Webアプリケーション入門 第5回
第8章 Web技術とセキュリティ   岡本 好未.
2004年度 サマースクール in 稚内 JavaによるWebアプリケーション入門
2003年度 データベース論 安藤 友晴.
概要 Boxed Economy Simulation Platform(BESP)とその基本構造 BESPの設計・実装におけるポイント!
ネットワークプログラミング論 平成28年11月21日 森田 彦.
Webアプリケーションの方向性 データベース論 第13回.
2006年度 東京サテライト校 エンタープライズ・アプリケーション II
Javaによる Webアプリケーション入門 第6回
Jakarta Struts (2) ソフトウェア特論 第11回.
Javaによる Webアプリケーション入門 第2回
エンタープライズアプリケーション II 第9回 / 2006年7月23日
Javaによる Webアプリケーション入門 第11回
Servlet ソフトウェア特論 第7回.
Servlet J2EE I (データベース論) 第12回 /
Servlet データベース論 第6回.
JSFによるWebアプリケーション開発 第3回
情報基礎演習I(プログラミング) 第11回 7月12日 水曜5限 江草由佳
EntityManager と EJB QL EJB 3.0 コース 第8回 2006年8月5日.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
Javaによる Webアプリケーション入門 第4回
WebアプリケーションとTomcat ― これまでの復習とこれからの予習 ―
JSPの基本 データベース論 第2回.
Action Method の実装 J2EE II 第9回 2004年12月2日.
Jakarta Struts (1) ソフトウェア特論 第10回.
稚内北星学園大学 情報メディア学部 専任講師 安藤 友晴
JSPの基本 J2EE I (データベース論) 第8回 /
JSFによるWebアプリケーション開発 第5回
プログラミング実習(Java) グラフィクス処理とGUIプログラミング 講師:坂口 利裕(横浜市立大学)
アウトライン Shiny の仕組み R システムに準備済みのオブジェクト Shiny のインストール Shiny のプログラム.
JSFによるWebアプリケーション開発 第10回
JSFによるWebアプリケーション開発 第7回
MVCモデル2による Webアプリケーション
Presentation transcript:

エンタープライズアプリケーション II 第10回 / 2006年7月23日 JSFのライフサイクル エンタープライズアプリケーション II 第10回 / 2006年7月23日

ここでの目標 UIコンポーネント・ツリー、イベント、JSFのライフサイクルについて一通り理解する。

UIコンポーネント・ツリー

UIコンポーネント・ツリー JSFでは、JSF独自のタグでJSPの画面を構成する。 JSFのアプリケーションの内部では、このタグの階層構造をJavaオブジェクトの階層構造に置き換えたものを管理する。 このJavaオブジェクトの階層構造が「コンポーネント・ツリー」 JSFでは、この「コンポーネント・ツリー」を使って、さまざまな処理を実行する。

guessNumberアプリケーションを構成するタグ <f:view> <h:form id="helloForm"> <h:outputText ...... /> <h:graphicImage …… /> <h:inputText ...... /> <h:commandButton ...... /> <h:message ...... /> </h:form> </f:view>

タグと UIコンポーネント・ツリー (1) <f:view> <h:form id="helloForm"> <h:outputText ...... /> <h:graphicImage …… /> <h:inputText ...... /> <h:commandButton ...... /> <h:message ...... /> </h:form> </f:view>

タグと UIコンポーネント・ツリー (2) UIコンポーネント・ツリーの各コンポーネントとJSPのタグが対応する UIViewRoot --> f:view UIForm --> h:form UIOutputText --> h:outputText UIInputText --> h:inputText UICommandButton --> h:commandButton UIMessage --> h:message

UIコンポーネント・ツリーの 保存場所 (1) サーバ → HttpSession に。 クライアント → 表示される HTMLの hidden タグに。 デフォルトではサーバ側で保存される。 web.xmlで設定できる。

UIコンポーネント・ツリーの 保存場所 (2) web.xmlで設定できる。 <context-param> <param-name> javax.faces.STATE_SAVING_METHOD </param-name> <param-value>client</param-value> </context-param>

JSFのイベント処理

イベント処理とは イベント = アプリケーションで行われる操作 イベント処理とは、ある特定のイベントが起こったときに、何らかの処理を行うこと イベント = アプリケーションで行われる操作 ボタンを押する 入力フィールドにデータを入力する イベント処理とは、ある特定のイベントが起こったときに、何らかの処理を行うこと

イベント処理のしくみ イベント発生元 イベントリスナー イベントが起こるところ ボタン、テキストフィールドなど 発生したイベントを受け取り、イベントに対応する処理を行うところ

JSFでの2種類のイベント処理 Action イベント Value Change イベント ボタンやハイパーリンクが押されたときに発生するイベント Value Change イベント ボタンが押されたとき、対象となるUIコンポーネントが変化していたら発生するイベント

JSFのライフサイクル

JSFのライフサイクル JSFのアプリケーションが、Webブラウザからリクエストを受け取ってからレスポンスを返すまでの処理手順 ライフサイクルには6つのフェーズがある

ライフサイクルの 6つのフェーズ (1) (1) ビューの復元 (2) リクエスト値の適用 (3) 入力値の検証 リクエスト元の画面のUIコンポーネントツリーを復元 (2) リクエスト値の適用 リクエストのときのパラメータ情報をUIコンポーネントツリーにセットする (3) 入力値の検証 設定された値にコンバータとバリデータを適用

ライフサイクルの 6つのフェーズ (2) (4) モデル値の更新 (5) アプリケーションの起動 (6) レスポンスのレンダリング UIコンポーネントの値を Managed Bean のプロパティにセット (5) アプリケーションの起動 Action Method を実行して遷移先を決定 (6) レスポンスのレンダリング 遷移先画面のUIコンポーネントツリーから、ブラウザに返すレスポンスを生成

ライフサイクルの詳細

guessNumberを題材に guessNumberサンプルアプリケーションの動作を確認しながら、ライフサイクルの各フェーズの動きを追ってみよう。

guessNumberを 題材に Webブラウザで0〜10までの数を入力して "Submit" ボタンを押すと WebブラウザからJSFのアプリケーションに対してリクエストが行われる。 その後でレスポンスとして「あたり」か「はずれ」の画面が出力される。 このリクエストからレスポンスにいたるまでのライフサイクルについて見てみよう。

(1) ビューの復元 WebブラウザからのリクエストがあってJSFのアプリケーションが呼ばれた場合、ライフサイクルはこのフェーズからはじまります。 2つのパターンがある このJSFアプリケーションに対する、最初のリクエストである場合 JSFアプリケーション内でのページ遷移によって、JSFページにアクセスがあった場合

(1) ビューの復元 このJSFアプリケーションに対する、最初のリクエストである場合 空のUIコンポーネント・ツリーを生成 「(6)レスポンスのレンダリング」フェーズに移る

(1) ビューの復元 JSFアプリケーション内でのページ遷移によって、JSFページにアクセスがあった場合 サーバかクライアントからUIコンポーネント・ツリーを復元

(2) リクエスト値の適用 リクエストのパラメータ情報をUIコンポーネント・ツリーに設定する。 guessNumber の場合、h:inputTextタグに入力された “9” が UIInput にセットされる。

(2) リクエスト値の適用 アクションイベントの発生 h:commandButton や h:commandLink が押された場合 「アクションイベント」が発生して アクションイベントが「イベント・キュー」に蓄えられる。 これらのイベントをどのフェーズで処理するか、アプリケーション制作者が調整できる。

(2) リクエスト値の適用 immediate / アクションイベント <h:commandButton immediate=“true” action=“cancel” value=“キャンセル” /> immediate属性の値が true のとき、アクションリスナへの通知とアクションの実行は、このフェーズで行われる。 これ以降のフェーズ (Managed Bean への値の設定など) を実行せずとも処理できるので、キャンセルボタンなどの実現に使われる。

(2) リクエスト値の適用 immediate / アクションイベント immediate属性の値が false のとき、アクションリスナへの通知とアクションの実行は、「(5) アプリケーションの起動」フェーズで行われる。 デフォルト値は false

(2) リクエスト値の適用 immediate/Value Changeイベント <h:inputText immediate=“true” value=“#{bean.quantity}” /> h:inputText などで値が変更された場合 immediate属性の値が true のとき、このフェーズで当該コンポーネントに関する次の処理が行われる。 コンバータ バリデータ Managed Bean のプロパティへの値のセット Value Change リスナの実行

(2) リクエスト値の適用 immediate/Value Changeイベント immediate属性の値が false のとき、Value Change リスナへの通知とリスナの実行は、「(5) アプリケーションの起動」フェーズで行われる。 デフォルト値は false

(3) 入力値の検証 バリデータが設定されているときに実行される。 (必要があれば)まずコンバータを実行 次にバリデータを実行 成功なら → Value Change イベントがイベントキューに蓄えられる 失敗なら → 「(6) レスポンスのレンダリング」フェーズに移る

(3) 入力値の検証 guessNumber では Validator である UserNumberBean#validate メソッドを実行している

(4) モデル値の更新 UIコンポーネント・ツリーの値を Managed Bean のプロパティにセット。 必要があれば、まずコンバータを実行する 失敗なら → 「(6) レスポンスのレンダリング」フェーズに移る Value Binding 式で指定された Managed Bean のプロパティに、UIコンポーネントの値をセットする。

(4) モデル値の更新 guessNumber の場合 h:inputText の Value Binding 式で指定されている userNumber プロパティは Integer 型である。 まずコンバータを実行して、入力データを Integer に変換する。 その後で userNumber プロパティに格納する。

(5) アプリケーションの起動 イベントキューの中身をリスナに通知する。 Action Method を実行する。 次の遷移先を決定する。 アクションイベント Value Change イベント Action Method を実行する。 次の遷移先を決定する。

(5) アプリケーションの起動 guessNumber の場合 <h:commandButton id="submit" action="success" value="Submit" /> action 属性の値と faces-config.xml での設定によって、次の画面遷移先が決まる。

(6) レスポンスのレンダリング これまでのフェーズで、次はどの画面に移り変わるかわかっている。 通常は「(5) アプリケーションの起動」で遷移先が決まる。 これまでのフェーズでエラーが起きているため、元の画面にとどまる場合もある 「(3)入力値の検証」でエラーが起きた。 「(4)モデル値の更新」でエラーが起きた。

(6) レスポンスのレンダリング 遷移先で 遷移先に移り変わる。 UIコンポーネント・ツリーを生成する。 Managed Bean の値をUIコンポーネント・ツリーに設定する。 レスポンスで返す HTML を生成する。 UIコンポーネント・ツリーを保存する。 サーバかクライアントに

(6) レスポンスのレンダリング guessNumber の場合 h:inputText の action 属性の値と faces-config.xml の設定によって、response.jsp に遷移する。 response.jsp では、Managed Bean の response プロパティの値をUIコンポーネントに設定する。 このとき、「あたり」か「はずれ」かをチェックする UIコンポーネント・ツリーから HTML を生成する。