FacesContext クラスの利用
J2EE II 第9回
2005年5月15日
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 属性
この例では、value 属性は List 型である bookList プロパティ
を指定している。
bookList には、複数の BookData が格納されている。
従って、var 属性で指定された book という変数名は、
BookData Bean を指している。
<h:dataTable id="table" border="1"
value="#{BookSearcher.bookList}“ var="book">
</h:dataTable>
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 は、BookSearcher のフィールド。
(ハイパーリンクを)クリックした行の book 変数
に対応付けられている BookData オブジェクトが
取得できる。
このオブジェクト (Bean) のデータを詳細画面で
表示する。
15
bookData プロパティ
BookSearcher には bookData というプロパティ
がある。
この book は、先の searchBookDetail メソッドで
取得した BookData 型のオブジェクト
public BookData getBookData {
return book;
}
16
詳細表示画面
<h1>詳細表示</h1>
<h:outputText
value="#{BookSearcher.bookData.id}" />
......
BookSearcher Bean の bookData プロパティ
の id プロパティを表示する。
17
© Copyright 2026 ExpyDoc