Component Binding エンタープライズアプリケーション II 第8回 / 2006年7月23日 1 ここでの内容 図書検索アプリケーションを通じて、 Component Binding のしくみを理解する 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 Component Binding (1) Component Binding = UIコンポーネントと Managed Bean を結びつけること。 Managed Beanに UIData 型のプロパティを用 意する。 dataTable は "UIData" という型になる。 public UIData getBookDataTable{ … }; public void setBookDataTable(UIData d) {}; 11 Component Binding (2) bookDataTable と h:dataTable を結びつける。 これがComponent Binding これで、dataTable の内部状態を調べることができる。 <h:dataTable id="table" border="1” value="#{BookSearcher.bookList}“ var="book” binding="#{BookSearcher.bookDataTable}"> </h:dataTable> 12 Action Method の実装 public String searchBookDetail() { // これだけで、クリックされた行の // book インスタンスを取得できる book = (BookData)bookDataTable.getRowData(); } return "detail"; 13 bookData プロパティ BookSearcher には bookData というプロパティ がある。 この book は、先の searchBookDetail メソッドで 取得した BookData 型のオブジェクト public BookData getBookData { return book; } 14 詳細表示画面 <h1>詳細表示</h1> <h:outputText value="#{BookSearcher.bookData.id}" /> ...... BookSearcher Bean の bookData プロパティ の id プロパティを表示する。 15 h:dataTable 中のどのデータがクリックされた のかを Action Method で調べたい そのために まとめ Managed Bean にh:dataTable に対応するオブ ジェクトであるUIData型のプロパティを用意 Component Binding によって、このプロパティと h:dataTable を明示的に結びつける h:dataTable に対してどのような操作が行わ れたか、Component Binding されている UIData型のプロパティを通して調べることが できる クリックされた行に対応する BookData オブ ジェクトを取得できた 16
© Copyright 2025 ExpyDoc