PowerPointファイル
Download
Report
Transcript PowerPointファイル
FacesContext クラスの利用
JSFによるWebアプリケーション開発
第8回
1
ここでの内容
JSFの内部状態を保持している、
FacesContext クラスを使ってみる。
2
図書検索プログラムの作成 (2)
3
やりたいこと
図書検索アプリ
ケーションの検索
結果表示画面で、
本のタイトルをク
リックすると、詳細
なデータが出るよう
にしたい
4
何をすればよいのか
「リンクをクリック」することによって、詳細
表示画面に遷移する。
そのためには、「どの本のデータがクリック
されたか」を知る必要がある。
具体的には、h:dataTable でどの
JavaBeans のデータがクリックされたかを
チェックする。
5
list.jsp からの
ハイパーリンクの実現
<h:column>
……
<h:commandLink id="detail"
action="#{BookSearcher.searchBookDetail}">
<h:outputText id="bookTitle"
value="#{book.title}"/>
</h:commandLink>
</h:column>
6
h:commandLink 要素 (1)
<h:commandLink id="detail"
action="#{BookSearcher.searchBookDetail}">
<h:outputText id="bookTitle"
value="#{book.title}"/>
</h:commandLink>
ハイパーリンクを実現するためのUIコンポーネント
id 属性がある。
action 属性では、Action Method を指定する。
7
h:commandLink 要素 (2)
<h:commandLink id="detail"
action="#{BookSearcher.searchBookDetail}">
<h:outputText id="bookTitle"
value="#{book.title}"/>
</h:commandLink>
h:outputText 要素で指定された文字列をクリックす
ると、Action Method の outcome と facesconfig.xml の設定によって画面が遷移する。
8
何が問題になるのか?
クリックされたらその詳細表示に飛ぶのだ
が、ではどうやって「どのデータがクリックさ
れたか」知るのだろうか?
どのデータがクリックされたか、 Action
Method が知っておく必要がある。
9
dataTable の var 属性
<h:dataTable id="table" border="1"
value="#{BookSearcher.bookList}“ var="book">
</h:dataTable>
var 属性は、コレクション中の1つの要素を表す
変数名となる。
List 中の1つの BookData が、表の1行分とな
る。
10
Action Method の実装
public String searchBookDetail() {
FacesContext context =
FacesContext.getCurrentInstance();
ExternalContext exContext =
context.getExternalContext();
Map map = exContext.getRequestMap();
book = (BookData)map.get("book");
}
return "detail";
11
FacesContext
FacesContext context =
FacesContext.getCurrentInstance();
FacesContext は、JSFアプリケーションの
現在の状態を保持しているオブジェクト
JSF の状態を取得するための出発点とな
るオブジェクト
12
ExternalContext
ExternalContext exContext =
context.getExternalContext();
ExternalContext は、Servlet や Portlet か
ら JSF を利用することを(特に)意識してい
るクラス。
request や session スコープの中で管理さ
れているオブジェクトを取り出す。
13
BookDataオブジェクトの取得
(1)
Map map = exContext.getRequestMap();
book = (BookData)map.get("book");
request スコープで管理されている情報を
Map で取得
“book” という変数名がついている
BookData オブジェクトを取得
14
BookDataオブジェクトの取得
(2)
Map map = exContext.getRequestMap();
book = (BookData)map.get("book");
(ハイパーリンクを)クリックした行の book
変数に対応付けられている BookData オ
ブジェクトが取得できる。
このオブジェクト (Bean) のデータを詳細
画面で表示する。
15
詳細表示画面
<h1>詳細表示</h1>
<h:outputText
value="#{BookSearcher.bookData.id}" />
......
BookSearcher Bean の bookData プロパティ
の id プロパティを表示する。
16