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

Slides:



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

データベースの基礎知識 ACEESS の基本操作. データベースの基礎知識 データベース  特定のテーマや目的に毎のデータの集合体 データベースソフトウェア  データベースを作成、管理するソフトウェアの総 称 Oracle(Oracle) IBM(DB2) Microsoft(SQL Server)
1 JSP の作成 JSF による Web アプリケーション 開発 第 4 回. 2 ここでの内容 JSF での JSP の作り方と動かし方につい て学ぶ。
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
バリデータ J2EE II 第11回 / 2006年1月19日.
JavaScript プログラミング入門 2006/11/10 神津.
Androidアプリを公開する方法.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
JSFによるWebアプリケーション開発 第9回
プログラミング基礎I(再) 山元進.
エンタープライズアプリケーション II 第10回 / 2006年7月23日
JSFによるWebアプリケーション開発 第11回
Servlet J2EE I 第8回 /
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
最適化ソルバーのための Python言語入門
独習Java ・ 10.6  Hashtableクラス ・ 10.7  String Tokenizerクラス  12月12日    小笠原 一恵.
稚内北星学園大学 情報メディア学部 助教授 安藤 友晴
タグライブラリ ソフトウェア特論 第6回.
タグライブラリとJSP J2EE I 第10回 /
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
情報処理 第6回.
タグライブラリとJSP J2EE II 第2回 2004年10月7日 (木).
JavaBeans とJSP データベース論 第5回.
JSFによるWebアプリケーション開発 第6回
HTTPプロトコル J2EE I 第7回 /
第20章 Flyweight ~同じものを共有して無駄をなくす~
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
JSPの作成 J2EE II 第3回 2005年4月10日.
Javaによる Webアプリケーション入門 第5回
2003年度 データベース論 安藤 友晴.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
第12回 2007年7月13日 応用Java (Java/XML).
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
プログラミング言語入門 手続き型言語としてのJava
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
第1回.リレーショナルデータベースを使ってみよう
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
Webアプリケーションの方向性 データベース論 第13回.
2006年度 東京サテライト校 エンタープライズ・アプリケーション II
Javaによる Webアプリケーション入門 第6回
Jakarta Struts (2) ソフトウェア特論 第11回.
Javaによる Webアプリケーション入門 第2回
エンタープライズアプリケーション II 第9回 / 2006年7月23日
第1章 実世界のモデル化と形式化 3.地物インスタンスの表現
Javaによる Webアプリケーション入門 第11回
情報理論2 第3回 小林 学 湘南工科大学 2011年10月25日 〒 神奈川県藤沢市辻堂西海岸1-1-25
JSFによるWebアプリケーション開発 第3回
情報基礎演習I(プログラミング) 第11回 7月12日 水曜5限 江草由佳
アルゴリズムとプログラミング (Algorithms and Programming)
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
EntityManager と EJB QL EJB 3.0 コース 第8回 2006年8月5日.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
C#プログラミング実習 第3回.
Javaによる Webアプリケーション入門 第4回
コレクション・フレームワーク J2EE I (データベース論) 第6回 /
コレクション・フレームワーク データベース論 第7回.
サブゼミ第7回 実装編① オブジェクト型とキャスト.
WebアプリケーションとTomcat ― これまでの復習とこれからの予習 ―
JSPの基本 データベース論 第2回.
Action Method の実装 J2EE II 第9回 2004年12月2日.
Jakarta Struts (1) ソフトウェア特論 第10回.
稚内北星学園大学 情報メディア学部 専任講師 安藤 友晴
アルゴリズムとデータ構造1 2009年6月15日
JSPの基本 J2EE I (データベース論) 第8回 /
JSFによるWebアプリケーション開発 第5回
アルゴリズムとデータ構造 2010年6月17日
JSFによるWebアプリケーション開発 第10回
プログラミング入門2 第5回 配列 変数宣言、初期化について
JSFによるWebアプリケーション開発 第7回
MVCモデル2による Webアプリケーション
Presentation transcript:

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

ここでの内容 JSFでの Action Method の実装方法について学ぶ。

やりたいこと 画面1で名前を入力する 画面1のボタンを押すと、画面2に遷移する。 画面2では、画面1で入力された名前と、現在の時刻を表示する。

何をすればよいのか ボタンが押されたときに、「現在の時刻を取得する」という「ビジネスロジック」を実行する。 こうしたビジネスロジックを「Action Method」と言う。 Action Method は、Managed Bean に記述する。

currentTime という Action Method (1) public class ParameterBean { public String currentTime() { Date d = new Date(); DateFormat df = DateFormat.getDateTimeInstance(); ...... sb.append(df.format(d)); return "success"; }

currentTime という Action Method (2) 現在の日時を取得して、入力フィールドのパラメータと組み合わせている。 返値として “success” という文字列を返す。

page1.jsp <h:form id="searchForm"> <h:inputText id="word" value="#{ParameterBean.word}" /> <h:commandButton id="button1" action="#{ParameterBean.currentTime}" value="Go!" /> </h:form>

action 属性の比較 前章 <h:commandButton id="button1" action="success" value="Go!" /> 本章 action="#{ParameterBean.currentTime}" value="Go!" />

#{ParameterBean.currentTime} こうしたしくみのことを “Method Binding” と言う。 こうした #{……} という書式を “Method Binding 式” と言う。

Method Binding 式 #{ Beanの名前 . Action Method名 } “Beanの名前” は、 先の managed-bean-name 要素の内容部分 “Action Method名” は、ボタンが押されたときに実行される Action Method 名

Action Method のルール public であること 引数がないこと String を返値とすること この返値が outcome になる。

Action Method の返値と outcome (1) この outcome が、h:commandButton 要素の action 属性の値となる。 この値と、faces-config.xml の設定情報により遷移先が決まる。

Action Method の返値と outcome (2) <h:commandButton id="button1" action="#{ParameterBean.currentTime}" value="Go!" /> ↓(Action Method を実行) ↓ action=“success” value="Go!" />

ほかには 次のファイルが必要になる page2.jsp faces-config.xml

図書検索プログラムの作成 (1)

プログラムの概要 (1) 検索語を入力すると、その検索語を含む本のデータのリストを出力する。 図書データはデータベースに格納されている。

プログラムの概要 (2) 入力フィールドに検索語を入れ、ボタンを押すと、Action Method が呼ばれる。 次の画面で、検索結果を出力する。

プログラムの概要 (3) 検索結果

検索語入力画面 <h:form id="searchForm"> <h:inputText id="searchWord" value="#{BookSearcher.word}" /> <h:commandButton id="submit" action="#{BookSearcher.searchBooks}" value="Go!" /> </h:form>

Managed Bean (1) プロパティ public class BookSearcher { ...... public void setWord(String word) { this.word = word; } public String getWord() { return word;

Managed Bean (2) Action Method public String searchBooks() { searchBooks(word); return "success"; } private void searchBooks(String word) { // データベースの検索処理

Managed Bean (3) Model の処理 (1) 検索結果には、複数の図書データが含まれる。 BookData という JavaBeans を用意 1冊の図書データは、1つの BookData に格納される。 java.util.List を使って、複数の BookData をまとめておく。

Managed Bean (3) Model の処理 (2) List<BookData> list = new ArrayList<BookData>(); BookData book = new BookData(); book.setId(rs.getString("id")); book.setTitle(rs.getString("title")); book.setAuthor(rs.getString("author")); list.add(book);

検索結果の出力画面 <h:dataTable id="table" border="1" value="#{BookSearcher.bookList}“ var="book"> <h:column> <f:facet name="header"> <h:outputText value="タイトル"/> </f:facet> <h:outputText id="bookTitle“ value="#{book.title}"/> </h:column> ...... </h:dataTable>

h:dataTable 要素 (1) コレクション (List, 配列など) のデータを表にして表示するUIコンポーネント id 属性がある。 border 属性は、表の罫線の太さの指定 <h:dataTable id="table" border="1" value="#{BookSearcher.bookList}“ var="book"> </h:dataTable>

h:dataTable 要素 (2) value 属性で、表示するコレクション型のプロパティを指定する。Value Binding 式を使う。 var 属性は、コレクション中の1つの要素を表す変数名となる。 <h:dataTable id="table" border="1" value="#{BookSearcher.bookList}“ var="book"> </h:dataTable>

h:dataTable 要素 (3) この例では、value 属性は List 型である bookList プロパティを指定している。 bookList には、複数の BookData が格納されている。 従って、var 属性で指定された book という変数名は、BookData Bean を指している。 <h:dataTable id="table" border="1" value="#{BookSearcher.bookList}“ var="book"> </h:dataTable>

h:column 要素 (1) <h:dataTable ……> <h:column> <f:facet name="header"> <h:outputText value="タイトル"/> </f:facet> <h:outputText id="bookTitle“ value="#{book.title}"/> </h:column>

h:column 要素 (2) h:dataTable 要素の1列分のデータを表す UIコンポーネント

f:facet 要素 表の1列のヘッダやフッタを表す UIコンポーネント <h:column> <f:facet name="header"> <h:outputText value="タイトル"/> </f:facet> …… </h:column>

データの出力 この列では、book という変数 (= BookData Bean) の title プロパティの値を出力する。 <h:column> …… <h:outputText id="bookTitle“ value="#{book.title}"/> </h:column>

h:dataTable の働き (1) 表の1行分が、h:dataTable の var 属性の値に対応 つまり、コレクション中の1つの JavaBeans が、表の1行分となる。 この例では、List 中の1つの BookData が、表の1行分となる。

h:dataTable の働き (2) BookData Bean のどのプロパティを出力するかは、column 要素によって決まる。

dataTableの分割表示

やりたいこと MyFacesの独自タグを使って、検索結果を分割して表示させる。 t:dataTable と t:dataScroller を使う。

t:dataTable 要素 <t:dataTable id=“bookTable” rows=“10” ……> ………… h:dataTableとほとんど同じ dataTableの分割表示 (t:dataScroller) や、ソートできるヘッダ (t:commandSortHeader) が使える rows 属性は、dataTable で一度に表示する行数を指定する

2つの t:dataScroller このJSPでは、2つのt:dataScroller が使われている 数字とアイコンが並んでいる行 “Page 1/3” となっている行

t:dataScroller 要素 (1) アイコンの表示 <t:dataScroller id="scroll1” for="bookTable” fastStep="10” paginator="true" paginatorMaxPages="9"> …… <t:dataScroller> for属性の値が、対象となるdataTableのid

t:dataScroller 要素 (2) アイコンの表示 6つの f:facet タグが、6つのアイコンとして表示される <t:dataScroller> <f:facet name=“first”> … </f:facet> <f:facet name=“last”> … </f:facet> <f:facet name=“previous”> … </f:facet> <f:facet name=“next”> … </f:facet> <f:facet name=“fastforward”> … </f:facet> <f:facet name=“fastrewind”> … </f:facet>

t:dataScroller 要素 (3) アイコンの表示 <f:facet name=“first> <h:graphicImage url="images/arrow-first.gif"/> </f:facet> </t:dataScroller> f:facet要素の子要素で、アイコンの画像を表示させている。

t:dataScroller 要素 (4) 現在のページ数の表示 <t:dataScroller id="scroll2" for="bookTable" pageCountVar="pageCount" pageIndexVar="pageIndex"> …… </t:dataScroller> pageCountVar 属性は、総ページ数を表す変数名 pageIndexVar 属性は、現在のページを表す変数名

h:outputFormat 要素 <h:outputFormat value="Page{0}/{1}"> <f:param value="#{pageIndex}" /> <f:param value="#{pageCount}" /> </h:outputFormat> パラメータを用いたメッセージ出力によく用いられる。 {0} の部分が、ひとつめの f:param 要素の value 属性の値に置き換えられる。 {1} の部分が、ふたつめの f:param 要素の value 属性の値に置き換えられる。

t:dataScroller 要素 (5) 現在のページ数の表示 <t:dataScroller id="scroll2" for="bookTable" pageCountVar="pageCount" pageIndexVar="pageIndex"> <h:outputFormat value="Page{0}/{1}"> <f:param value="#{pageIndex}" /> <f:param value="#{pageCount}" /> </h:outputFormat> </t:dataScroller> “pageIndex / pageCount” を展開した文字列が出力される。