SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Java EE 6 開発入門

JSF2でアプリケーションのビューを作成する

JavaEE6 開発入門(3)


  • X ポスト
  • このエントリーをはてなブックマークに追加

 では、このサンプルを動かしてみましょう。http://localhost:8080/SampleWebApp/jsfsampleでサーブレットを呼び出します。表示結果は次の画面のようになります。

図4 samplejsf.xhtmlの表示画面
図4 samplejsf.xhtmlの表示画面

 ここで、JSFファイルとサーブレットの内容を振り返ってみましょう。

 サーブレット内で作成したデータであるdataList(ArrayListクラス)を、JSFで表示します。データの表示部分は、[リスト4]のJSFファイルの(1)から(3)の部分です。JSFで表示したいオブジェクトの参照をするには #{ } で記述します。

 今回参照したいオブジェクトはサーブレットにあるdataListオブジェクトでしたが、このオブジェクトをJSFへ引き渡すよう、コンテナに対して情報を格納してあげなければいけません。その方法は、リクエスト属性やセッション属性といった、サーブレットの世界ですでに格納する器が用意されているので、この器を利用します。この器に格納することで、サーブレットの処理が終了した後、別のサーブレットやJSF、JSPで参照できるようになります。

 リクエスト属性はサーブレットが呼ばれてJSFが表示されるまで保存される領域で、大抵はリクエスト属性に格納することになります。対してセッション属性とは、明示的に消去するか、有効期限が過ぎるまで情報を保存してくれる領域です。複数の画面で繰り返し使われる情報をセッション属性に保存することで、処理の効率化や、コード量の軽減が可能です。

 リクエスト属性などへ格納する具体的なコードですが、このサンプルではサーブレットの末尾の近くにて、request.setAttribute("dataList", dataList);と記述してある箇所になります。このメソッドはsetAttribute(名前,オブジェクト)でデータをサーブレットのリクエスト属性へ格納されるので、dataListとして作成したオブジェクト(ArrayList)がdataListという名前で格納していることになります。

 サーブレット属性にデータが格納されたところで、次はJSFのコードに移ります。

 (1)<h:dataTable>valueで指定したオブジェクトがテーブル形式で出力されます。var="item"と指定することで、この<h:dataTable>内で扱われるデータの1行分をitemという名前で扱うことができます。今回の例では、このitemはサーブレット内でdataListに格納していたMap1つになります。

 (2)(3)で列の値を表示します。<h:column>は列要素を定義するタグで、左から表示したい順番に記述します。実際に表示される内容は<h:column></h:column>に挟んで記述していきます。

 例えば(2)では、<h:outputText>要素があるので、valueで指定した値をエスケープ処理(※1)した上で表示します。表示する内容は #{ item.day }となっているので、itemオブジェクトが持っているdayの内容を表示することを意味します。itemオブジェクトは、今回Mapオブジェクトですから、本来であればget("名前")で参照するところを、.(ドット)で省略して記述できます。

 このドットで連結して値やメソッドを指定する方法によって、より階層の深いオブジェクトでもメソッド名を省略して記述することが可能になり、コードが読みやすくなり、データとHTMLの構造がより理解しやすいものになります。

 また、(2)(3)は、データの行数分繰り返して、自動的に出力されていきます。

※1

 表示する値にHTMLのタグ文字列(<,>)や制御に関する文字(&や"など)があった場合、そのまま出力するとHTMLのタグに影響を及ぼし、記述内容によっては表示されたくない内容を表示させてしまう。こういった文字列を外部参照文字に置換すること。例えば<は&lt;に変換され、ブラウザ上では<で表示される。

まとめ

 今回は、JSFのタグの中からdataTableを取り上げて、簡単にJSFでデータを表示する方法を紹介しましたが、次回ではよりもっとダイナミックに画面を作れるようになる、Ajaxを利用したFaceletsを取り上げていきます。

参考文献

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Java EE 6 開発入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 東 浩二(アズマ コウジ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5971 2011/08/08 12:32

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング