SlideShare une entreprise Scribd logo
1  sur  37
Beginning Java EE 6 勉強会(4)
            -プレゼンテーション-

        担当者:@georgenano
              George OKADA
        2012/05/30
目次

         プレゼンテーション

第10章:JavaServer Faces
第11章:ページとコンポーネント                        @georgenano
第12章:処理とナビゲーション

           ビジネスロジック                                        相互運用

第06章:Enterprise Java Beans
第07章:セッションBeanとタイマサービス                 @inatus   第13章:メッセージの送信
第08章:コールバックとインターセプタ                              第14章:SOAP Webサービス
第09章:トランザクションとセキュリティ                             第15章:RESTful Webサービス


               永続化

第02章:Javaと永続化                          @making
第03章:ORM
第04章:永続性オブジェクトの管理
                                        @kjstylepp
第05章:コールバックエリア



12/05/30                     Beginning JavaEE6 勉強会(4)             2
第10章
                      JavaServer Faces




12/05/30   Beginning JavaEE6 勉強会(4)   3
JSF(JavaServer Faces)とは

JavaServer Faces (JSF) is a user interface (UI) framework for Java web
   applications. [2]


                HTTP
               リクエスト                               XUL                  ④
                                                                    コンバータ
  ブラウザ         (Ajax)
                         ①            ③             JSP              コンバータ
                                                    XHTML
    HTML        ⑦       Faces       レンダラ
  JavaScript            Servlet
    CSS                                              ②                  ⑤
                HTTP                                                バリデータ
                                                                     バリデータ
               レスポンス




                                      faces- ①       マネージド
                                    config.xml
                                   (オプション)               Bean
                                                                ⑥
[1] ※但し、赤文字は発表者が追記した


12/05/30                Beginning JavaEE6 勉強会(4)                    4
参考|StrutsとJSFとの比較

Struts                   JSF1.2                 JSF2.0
struts-config.xml        faces-config.xml       マネージドBeanなどへの
                                                アノテーション


DispatchAction           メソッドバインディング            メソッドバインディング



アクションマッピング               faces-config.xmlの      マネージドBeanなどへの
                         navigation-rule        アノテーション


ActionForm               マネージドBean              マネージドBean




[3] ※発表者がJSF2.0の列を追加した

12/05/30             Beginning JavaEE6 勉強会(4)            5
①FacesServletとfaces-config.xml (第12章に詳解)

FacesServlet:
    ‣MVCモデルのコントローラの役割
    ‣ユーザからのリクエストに応じて、マネージドBean上で定義したアク
      ションを実行する
   ‣JSF実装の内部に存在し、利用者が直接触ることはできない
      ➡JSFの利用者は気にしなくてもよい
faces-config.xml:
    ‣後述するマネージドBeanの一覧や、画面遷移情報を記述する設定
      ファイル
    ‣JSF2.0からはマネージドBeanにアノテーションをつけることで同様の
      意味となるため、省略可能になった
           ➡JSF2.0の利用者は気にしなくてもよい

12/05/30           Beginning JavaEE6 勉強会(4)   6
①FacesServletとfaces-config.xml (第12章に詳解)

faces-config.xmlのサンプル

   <?xml version="1.0" encoding=‘UTF-8’?>
   <faces-config xmlns=”http://java.sun.com/xml/ns/javaee”
                 xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
                 xsi:schemaLocation=”http://java.sun.com/xml/nsjavaee
                 http://java.sun.com/xml/ns/javaee/web-faceconfig_2_0.xsd”
                 version=”2.0”>

       <managed-bean>
           <managed-bean-name>BookController</managed-bean-name>
           <managed-bean-class>BookController</managed-bean-class>
           <managed-bean-scope>request</managed-bean-scope>
       </managed-bean>

       <navigation-rule>
           <from-view-id>newBook.xhtml</from-view-id>
           <navigation-case>
               <from-outcome>success</from-outcome>
               <to-view-id>listBooks.html</to-view-id>
           </navigation-case>
       </navigation-rule>

   </faces-config>




12/05/30                  Beginning JavaEE6 勉強会(4)                       7
②ページとコンポーネント (第11章に詳解)

ページ:
  ‣MVCモデルのビューの役割
  ‣ページ宣言言語にはFaceletsの利用が推奨(JSPも利用可)
コンポーネント:
    ‣ページを記述するための構成要素
      ‣例:<h:head>, <h:body>, <h:outputLabel>...




              [3]

12/05/30            Beginning JavaEE6 勉強会(4)      8
③レンダラ

レンダラ:
    ‣ユーザーインターフェイスの構造を、デバイスに適合したユーザーイン
      ターフェイスの表現形式に変換するクラスのこと [3]
    ‣レンダラの例:HTML4.01関連レンダラ、ワイヤレス・マークアップ言
      語(WML)、Scalable Vector Graphics(SVG)...
           ➡JSFの利用者は(それほど)気にしなくて良い




                 [3]
12/05/30           Beginning JavaEE6 勉強会(4)     9
④コンバータと⑤バリデータ (第12章に詳解)

コンバータ:
    ‣次の2つの役割
           (1)画面から入力された文字列を マネージドBeanのプロパティの型のオブ
             ジェクトに 変換
           (2)マネージドBeanのプロパティの型のオブジェクトを レンダラ用の文字
             列に 変換
  ‣変換時にエラーが発生した場合、エラーメッセージを返却
バリデータ:
    ‣ユーザが入力した値が有効か否か検証する役割
    ‣複数のバリデータを1つのコンポーネントに関連付け可能
    ‣検証時にエラーが発生した場合、エラーメッセージを返却


12/05/30            Beginning JavaEE6 勉強会(4)   10
⑥マネージドBeanと画面遷移 (第12章に詳解)

マネージドBean:
  ‣画面遷移、EJB呼出、コンポーネントとデータの同期、ビジネスロジック
       を行う役割
        ➡JSFの肝

   マネージドBeanの例
   @ManagedBean(name = “bookController”)
   public class BookController {
       @EJB
       private BookEJB bookEJB;

       private Book book = new Book();

       public String doCreateBook(){
           book = bookEJB.createBook(book);
           return “listBooks.xhtml”;
       }
       // bookのゲッター、セッター
   }

   マネージドBeanのページからの利用例
   <h:inputText value=”#{bookController.book.isbn}”/>
   <h:outputText value=”#{bookController.book.isbn}”/>
   <h:commandButton value=”Create” action=”#{bookController.doCreateBook}”/>
12/05/30                   Beginning JavaEE6 勉強会(4)                     11
⑦Ajaxサポート (第12章で詳解)

Ajaxサポート:
    ‣非同期でページの一部を少しずつ更新する技術
    ‣JSF2.0からは標準仕様でAjaxがサポートされた
    ‣<f:ajax>タグを利用することで非同期処理が可能に




12/05/30      Beginning JavaEE6 勉強会(4)   12
Exercise①|サンプルプログラムの確認

目的:サンプルプログラムの概要を把握する

課題:サンプルプログラムの中身を確認する

準備:https://svn.kenai.com/svn/beginningee6~src/book/trunk/
  chapter10からチェックアウトして、「依存関係で構築」

手順:

    1.「プロジェクトを実行」してサンプルアプリの挙動を確認
    2.Book.java, BookEJB.java, BookController.javaの中身を確認
    3.newBook.xhtml, listBooks.xhtmlの中身を確認
    4.faces-config.xmlが無く、BookController.javaに「@ManagedBean」アノ
       テーションがある事を確認




12/05/30             Beginning JavaEE6 勉強会(4)         13
Exercise②|書籍情報の追加

目的:JSFの概要を把握する

課題:書籍情報に「著者名」を追加する

手順: Chapter10プロジェクトの各ソースを変更

    1.Bookエンティティへ「著者名」を追加
    2.BookEJB, BookControllerに影響が及ばないことを確認
    3.newBook.xhtml, listBooks.xhtmlへ「著者名」を追加




12/05/30           Beginning JavaEE6 勉強会(4)     14
第11章
              ページとコンポーネント




12/05/30   Beginning JavaEE6 勉強会(4)   15
【再掲】JSF(JavaServer Faces)とは

JavaServer Faces (JSF) is a user interface (UI) framework for Java web
   applications. [2]


                HTTP
               リクエスト                               XUL                   ④
                                                                    コンバータ
  ブラウザ         (Ajax)
                         ①            ③             JSP              コンバータ
                                                    XHTML
    HTML        ⑦       Faces       レンダラ
  JavaScript            Servlet
    CSS                                              ②                   ⑤
                HTTP                                                バリデータ
                                                                     バリデータ
               レスポンス




                                      faces- ①       マネージド
                                    config.xml
                                   (オプション)               Bean
                                                                ⑥
[1] ※但し、赤文字は発表者が追記した


12/05/30                Beginning JavaEE6 勉強会(4)                    16
準備

以下では実例のソースを見ながら、(適宜、結果をブラウザなど
 で表示しながら)説明をお聞きください
1.https://svn.kenai.com/svn/beginningee6~src/book/trunk/chapter11
   からチェックアウト

2.「プロジェクトを実行」

3.http://localhost:8080/chapter11/から結果を確認




12/05/30             Beginning JavaEE6 勉強会(4)           17
HTML

Hypertext Markup Language(HTML):
    ‣Webページで最も使用されている言語
    ‣通常<HTML>や<BODY>タグが必要だが、省略されてもブラウザは
      表示してくれる
    ‣XML的には無効な場合が多く、検証できない
    ‣XML的には無効な例
       ‣必要なタグがない
       ‣終了タグがない
       ‣タグに大文字と小文字が混在している
    ‣実例:ex01/newBook.html



12/05/30        Beginning JavaEE6 勉強会(4)   18
XHTML

eXtensible HyperText Markup Language(XHTML):
    ‣Webページの推奨言語
    ‣厳密なXML構文規則に則っている
    ‣XML構文規則とスキーマ制約の検証で管理、解析が用意
    ‣XML的には有効にした例
       ‣必要なタグを記述している
       ‣終了タグを記述している
       ‣タグを小文字で統一している
    ‣実例:ex01/newBook.xhtml




12/05/30       Beginning JavaEE6 勉強会(4)   19
CSS

Cascading Style Sheets(CCS):
    ‣ドキュメントのプレゼンテーションを表現するスタイル言語
    ‣色、フォント、レイアウトなどのデザインを定義
    ‣ドキュメントのコンテンツとデザインを分離可能になる
    ‣実例:ex01/newBookWithCSS.xhtml




12/05/30        Beginning JavaEE6 勉強会(4)   20
JavaScript

JavaScript:
    ‣クライアント側のWeb開発に使用するスクリプト言語
    ‣クライアント側で動的コンテンツを提供可能
    ‣実例:ex01/newBookWithJavascript.xhtml
      ‣必須入力項目(価格情報)が正しく入力されているか検証




12/05/30       Beginning JavaEE6 勉強会(4)   21
JSP

JavaServer Pages(JSP):
    ‣クライアントのリクエストに対するレスポンスを動的に生成する言語
    ‣サーバ側で保持されるDBやEJBを利用可能
    ‣サーバ側で処理され、サブレットとしてコンパイルされる
    ‣コンパイルされた結果はHTML、XHTMLの両方ある
    ‣ビジネスロジックとプレゼンテーションが混じっており、開発・保守が難
      しい
    ‣基本構文:�<%@ ディレクティブ %>, <%! 宣言 %>,
      <% スクリプトレット %>, <%= 式 %>
    ‣実例:ex05/listBooks.jsp ex05/listBooks.jspx



12/05/30           Beginning JavaEE6 勉強会(4)      22
式言語(EL)とJSP Standard Tag Library

Expression Language(EL式):
   ‣JSPのスクリプト要素と同様のアクションを実行する簡単な構文の言語
   ‣基本構文:�${expr}
JSP Standard Tag Library(JSTL):
    ‣JSPでよく使われるタグのライブラリ
    ‣JavaコードとXHTMLタグの混在を避ける事ができる
    ‣オブジェクトに対する値の設定、例外ハンドリング、条件付き処理、繰
      り返し処理、DBアクセス...
    ‣コアアクション:<c:out>, <c:if>, <c:forEach>...
    ‣実例: ex06/checkNumbers.jsp



12/05/30           Beginning JavaEE6 勉強会(4)    23
Facelets

Facelets:
     ‣JSPに代わってビューを記述できるテンプレートフレームワーク
     ‣XHTMLとFaceletsの標準タグ(ui接頭辞)で記述する
     ‣実例:ex11/newBook.xhtml ex11/layout.xhtml
 Faceletsのタグ [1] ※一部の説明を簡略化した

タグ                 説明
<ui:composition>   テンプレートを使用するコンポジションの定義
<ui:component>     コンポーネントの作成
<ui:debug>         デバッグ情報の取得
<ui:define>        テンプレートを使用し、ページに挿入するコンテンツを定義
<ui:decorate>      ページ内の一部コンテンツを装飾
<ui:fragment>      ページ内のフラグメントの追加
<ui:include>       <jsp:include>と同様
<ui:insert>        テンプレートにコンテンツを挿入
<ui:param>         インクルードしたファイルまたはテンプレートにパラメータを渡す
<ui:repeat>        <c:foreach>と同様
<ui:remove>        ページからコンテンツを削除

12/05/30                       Beginning JavaEE6 勉強会(4)   24
JavaServer Faces

JavaServer Faces:
        ‣a user interface (UI) framework for Java web applications.[2]
        ‣下記以外のJSTLは未サポート
        ‣実例:htmlcomponents.xhtml(HTML components)


FaceletsをPDLとして使用するページで使用可能なタグライブラリ [1] ※一部の説明を簡略化した

URI                                      接頭辞        説明
http://java.sun.com/jsf/html             h          このタグライブラリはコンポーネントとHTMLレンダラを含む
http://java.sun.com/jsf/core             f          このライブラリは特定のレンダリングに依存しないカスタムアクショ
                                                    ンを含む
http://java.sun.com/jsf/facelets         ui         このライブラリのタグはテンプレート化のサポートを追加
http://java.sun.com/jsf/composit         composit   このタグライブラリは複合コンポーネントの宣言と定義に使用
http://java.sun.com/jsp/jstl/core        c          FaceletsページはJSPコアタグライブラリの一部を使用可能
http://java.sun.com/jsp/jstl/functions   fn         Faceletsページは全てのJSP関数タグライブラリを使用可能


12/05/30                                      Beginning JavaEE6 勉強会(4)           25
第12章
                      処理と画面遷移




12/05/30   Beginning JavaEE6 勉強会(4)   26
【再掲】JSF(JavaServer Faces)とは

JavaServer Faces (JSF) is a user interface (UI) framework for Java web
   applications. [2]


                HTTP
               リクエスト                               XUL                   ④
                                                                    コンバータ
  ブラウザ         (Ajax)
                         ①            ③             JSP              コンバータ
                                                    XHTML
    HTML        ⑦       Faces       レンダラ
  JavaScript            Servlet
    CSS                                              ②                   ⑤
                HTTP                                                バリデータ
                                                                     バリデータ
               レスポンス




                                      faces- ①       マネージド
                                    config.xml
                                   (オプション)               Bean
                                                                ⑥
[1] ※但し、赤文字は発表者が追記した


12/05/30                Beginning JavaEE6 勉強会(4)                    27
①FacesServlet

javax.faces.webapp.FacesServlet
    ‣JSFにおけるjavax.servlet.Servletの実装
    ‣全てのユーザからのリクエストはこのコントローラを経由する

           FacesServletの相互作用
           [1]


                                Lifecycle
                                              3: 6つのフェーズで利用する



                  2: 制御をライフサイクルに渡す             FacesContext


                                              1: FacesContextを生成する
              画面の     イベント
                               FacesServlet
              ボタン




12/05/30             Beginning JavaEE6 勉強会(4)                        28
FacesContext

javax.faces.context.FacesContext
    ‣リクエストの処理と対応するレスポンスの作成に関連付けるコンテキス
        ト情報
    ‣マネージドBeanでgetCurrentInstance()で取得できる
   FacesContextのメソッドの一部 [1]

  メソッド                    説明
  addMessage              メッセージの追加
  getApplication          Webアプリケーションと関連付けられるApplicationインスタンスの取得
  getAttributes           FacesContextインスタンスと関連付けられる属性をMapで取得
  getCurrentInstance      現在のスレッドが処理するリクエストのFacesContextインスタンスの取得
  getELContext            現在のFacesContextインスタンスのELContextインスタンスの取得
  getMaximumSeverity      キューに登録されているFacesMessageの重要度の最大値を取得
  getMessage              FacesMessageコレクションの取得
  getPartialViewContext   リクエストのPartialViewContextオブジェクトの取得
  getViewRoot             リクエストに関連付けられているルートコンポーネントを取得
  release                 FacesContextインスタンスに関連付けられるリソースの解放

12/05/30                        Beginning JavaEE6 勉強会(4)             29
JavaServer Facesページの6つのライフサイクル

           利用者は
           気にしない         コンバータ           レスポンス        バリデータ          レスポンス

  リクエスト    ビュー           入力値            イベント            検証           イベント
           の復元           の適用             の処理           の処理           の処理



                          レスポンス                         レスポンス

  レスポンス    レスポンスの        イベント           アプリの          イベント           モデル値
           レンダリング        の処理             呼出し           の処理           の更新
           コンバータ                       マネージドBean                     利用者は
                                                    型変換または           気にしない
                                                    検証のエラー
[1] ※赤文字は発表者が追記し
た
 JSFライフサイクルにおける6つのフェーズ [4]

フェーズ名               説明
ビューの復元              リクエストに基づいて、ページのUIViewRootコンポーネントツリーを作成(復元)する
入力値の適用              送信されたフォーム値をUIコンポーネントに適応する
検証処理                UIコンポーネントに関連付けられたバリデータ(データ検証)を行う
モデル値の更新             入力の適用でUIコンポーネントと関連付けられた値をマネージドBeanに更新する
アプリの呼出し             マネージドBeanのイベントメソッドを起動し、ビジネスロジックを処理する
レスポンスのレンダリング        処理結果をHTMLなどにレンダリングを行い、レスポンスとして返す

12/05/30                 Beginning JavaEE6 勉強会(4)               30
④コンバータ

javax.faces.convert.*
  ‣UIコンポーネントの値と対応するプリミティブ型を相互自動変換
  ‣使い方:
     ‣<f:convertDataTime pattern=”MM/dd//yy”/>
  ‣実例:ex12/newBook.xhtml
  ‣プリミティブ型ではない場合、独自コンバータを作成する必要有
     ➡カスタムコンバータという
カスタムコンバータ
    ‣作り方:javax.faces.convert.Convertインターフェースを実装したク
      ラスに、@FacesConverterアノテーションを付与する
    ‣使い方:<f:converter converterId=”カスタムコンバータ名”/>


12/05/30         Beginning JavaEE6 勉強会(4)   31
⑤バリデータ

javax.faces.validator.*
    ‣ユーザの入力を検証する
    ‣使い方:<f:validateLength minimum=”2” maximum=”20”/>
    ‣標準バリデータで満足できない場合、独自バリデータを作成する必要
      有
   ➡カスタムバリデータという
カスタムバリデータ
    ‣作り方:javax.faces.validator.Validatorインターフェースを実装し
      たクラスに、@FacesValidatorアノテーションを付与する
    ‣使い方:<f:validator validatorId=”カスタムバリデータ名”/>



12/05/30          Beginning JavaEE6 勉強会(4)   32
Exercise③|発行日の追加とタイトルの文字数チェック

目的:コンバータとバリデータの使い方を把握する

課題:書籍情報に「発行日」を追加し、「タイトル」が2文字以上20文字以下チェック
  を追加する

手順:Exercise②の結果のソースに以下を実施

    1.BookエンティティへのDate型の「発行日」追加
           ‣「@Temporal」の付与不足を忘れずに
    2.BookEJB, BookControllerマネージドBeanの確認
    3.newBook.xhtml, listBooks.xhtmlへの「発行日」追加
    4.newBook.xhtmlへの標準コンバータ「convertDateTime」タグの追加
      ‣htmlタグ内に「xmlns:f="http://java.sun.com/jsf/core"」追加
    5.newBook.xhtmlへの標準バリデータ「validateLength」タグの追加




12/05/30            Beginning JavaEE6 勉強会(4)         33
⑥マネージドBean

作り方:
    ‣@ManagedBeanアノテーションをクラスに付与
    ‣JSF1.2まではfaces-config.xmlへのエントリが必要だった
役割:
    ‣状態の保持�book属性
    ‣ページで参照するアクションメソッドの定義�doCreateBook()
    ‣画面遷移�return “listBooks.xhtml”
必要条件:
    ‣スコープの設定が必要。設定しないと@RequestScopeを使用
    ‣クラスをpublicとして定義。finalやabstractの定義は不可
    ‣クラスは引数なしのパブリックコンストラクタが必要
    ‣クラス中でfinalize()メソッドの定義は不可
    ‣属性はパブリックのゲッター、セッターが必要



12/05/30          Beginning JavaEE6 勉強会(4)   34
⑦Ajax

概要:JSF2.0からAjaxが標準仕様になった
使い方:
    ‣準備:標準仕様で定義されたJavaScriptライブラリ(jsf.js)を使用
      ‣<h:outputScript name=”jsf.js” library=”javax.faces”
           target=”head”/>
  ‣使用したいタグ内で<f:ajax>タグを使用する
    ‣<f:ajax execute=”@form” render=”:bookList”/>
‣実例:Chapter12/ex14/newBook.xhtml




12/05/30             Beginning JavaEE6 勉強会(4)       35
Exercise④|書籍情報を非同期で表示する機能

目的:マネージドBeanとAjaxの使い方を把握する

課題:書籍情報を非同期で表示する機能を追加する

手順:Exercise③の結果のソースに以下を実施

    1.newBook.xhtmlに非同期で表示する機能を追加
           ‣listBooks.xhtmlから必要部分をコピペ
           ‣ボタンタグ内に<f:ajax>タグを追加
           ‣renderとid
    2.BookController.javaの遷移先を変更




12/05/30              Beginning JavaEE6 勉強会(4)   36
引用文献

[1] Antonio Goncalves 著, 日本オラクル株式会社 監訳「Beginning Java EE 6」2012年, 翔泳社

[2] Java Community Process「JSR-000314 JavaServerTM Faces 2.0(Final Release)」http://
    jcp.org/aboutJava/communityprocess/final/jsr314/index.html

[3] 佐藤治夫, 小泉守義 「ThinkIT JDeveloperで学ぶJSF入門 第2回:JSFを構成する要素」http://
    thinkit.co.jp/free/article/0607/8/2/

[4] Syboos.jp編集長 「ライフサイクルから理解するJSFの仕組み」 http://www.syboos.jp/jsf/doc/
    phase-in-lifecycle.html




12/05/30                    Beginning JavaEE6 勉強会(4)                     37

Contenu connexe

Tendances

Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Norito Agetsuma
 
JSF2.2で簡単webアプリケーション開発
JSF2.2で簡単webアプリケーション開発JSF2.2で簡単webアプリケーション開発
JSF2.2で簡単webアプリケーション開発Masuji Katoda
 
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jpJava EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jpNorito Agetsuma
 
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427Nobuhiro Sue
 
JPA説明会
JPA説明会JPA説明会
JPA説明会Ryo Asai
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012Mikiya Okuno
 
C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理Insight Technology, Inc.
 
45分で理解する SQL Serverでできることできないこと
45分で理解する SQL Serverでできることできないこと45分で理解する SQL Serverでできることできないこと
45分で理解する SQL ServerでできることできないことInsight Technology, Inc.
 
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」Hiroyuki Ohnaka
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発Mitsuru Katoh
 
Seas で語られたこととは?
Seas で語られたこととは?Seas で語られたこととは?
Seas で語られたこととは?Masayuki Ozawa
 
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法Mitsuru Katoh
 
Mvc conf session_3_takehara
Mvc conf session_3_takeharaMvc conf session_3_takehara
Mvc conf session_3_takeharaHiroshi Okunushi
 
JavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jpJavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jpNorito Agetsuma
 
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQLRyusuke Kajiyama
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallMasatoshi Tada
 
初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談Makoto Haruyama
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugY Watanabe
 

Tendances (20)

Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
 
Java EE8 Report
Java EE8 ReportJava EE8 Report
Java EE8 Report
 
JSF2.2で簡単webアプリケーション開発
JSF2.2で簡単webアプリケーション開発JSF2.2で簡単webアプリケーション開発
JSF2.2で簡単webアプリケーション開発
 
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jpJava EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
 
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427
 
JPA説明会
JPA説明会JPA説明会
JPA説明会
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012
 
C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理
 
45分で理解する SQL Serverでできることできないこと
45分で理解する SQL Serverでできることできないこと45分で理解する SQL Serverでできることできないこと
45分で理解する SQL Serverでできることできないこと
 
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 
Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
 
Seas で語られたこととは?
Seas で語られたこととは?Seas で語られたこととは?
Seas で語られたこととは?
 
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
 
Mvc conf session_3_takehara
Mvc conf session_3_takeharaMvc conf session_3_takehara
Mvc conf session_3_takehara
 
JavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jpJavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jp
 
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 

Similaire à Beginning Java EE 6 勉強会(4) #bje_study

Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Taiji Miyabe
 
Public 20100828 j_ruby_kaigi_10things_jror_with_javaee
Public 20100828 j_ruby_kaigi_10things_jror_with_javaeePublic 20100828 j_ruby_kaigi_10things_jror_with_javaee
Public 20100828 j_ruby_kaigi_10things_jror_with_javaeeYoshiharu Hashimoto
 
[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web IntegrationKazuchika Sekiya
 
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)Ryusaburo Tanaka
 
最新 ASP.NET Web 開発オーバービュー
最新 ASP.NET Web 開発オーバービュー最新 ASP.NET Web 開発オーバービュー
最新 ASP.NET Web 開発オーバービューAkira Inoue
 
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 Takakiyo Tanaka
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotationEIICHI KIMURA
 
マイクロソフトにとってのWebって?
マイクロソフトにとってのWebって?マイクロソフトにとってのWebって?
マイクロソフトにとってのWebって?Microsoft
 
【17-B-6】RIAの性能テストとアプリケーション品質向上のための管理手法
【17-B-6】RIAの性能テストとアプリケーション品質向上のための管理手法【17-B-6】RIAの性能テストとアプリケーション品質向上のための管理手法
【17-B-6】RIAの性能テストとアプリケーション品質向上のための管理手法Developers Summit
 
JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)taskie
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionGoh Matsumoto
 
RedHat MW 2015
RedHat MW 2015RedHat MW 2015
RedHat MW 2015omatsuha
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッションYuichi Hasegawa
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門minazou67
 

Similaire à Beginning Java EE 6 勉強会(4) #bje_study (20)

Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Java fx勉強会lt 第8回
Java fx勉強会lt 第8回
 
Public 20100828 j_ruby_kaigi_10things_jror_with_javaee
Public 20100828 j_ruby_kaigi_10things_jror_with_javaeePublic 20100828 j_ruby_kaigi_10things_jror_with_javaee
Public 20100828 j_ruby_kaigi_10things_jror_with_javaee
 
[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration
 
Backbone.js入門
Backbone.js入門Backbone.js入門
Backbone.js入門
 
Mvc conf session_1_osada
Mvc conf session_1_osadaMvc conf session_1_osada
Mvc conf session_1_osada
 
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
 
Springの今
Springの今Springの今
Springの今
 
110409 slintky lt
110409 slintky lt110409 slintky lt
110409 slintky lt
 
最新 ASP.NET Web 開発オーバービュー
最新 ASP.NET Web 開発オーバービュー最新 ASP.NET Web 開発オーバービュー
最新 ASP.NET Web 開発オーバービュー
 
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotation
 
マイクロソフトにとってのWebって?
マイクロソフトにとってのWebって?マイクロソフトにとってのWebって?
マイクロソフトにとってのWebって?
 
【17-B-6】RIAの性能テストとアプリケーション品質向上のための管理手法
【17-B-6】RIAの性能テストとアプリケーション品質向上のための管理手法【17-B-6】RIAの性能テストとアプリケーション品質向上のための管理手法
【17-B-6】RIAの性能テストとアプリケーション品質向上のための管理手法
 
JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
 
RedHat MW 2015
RedHat MW 2015RedHat MW 2015
RedHat MW 2015
 
20100218
2010021820100218
20100218
 
SimpleModeler
SimpleModelerSimpleModeler
SimpleModeler
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
 

Beginning Java EE 6 勉強会(4) #bje_study

  • 1. Beginning Java EE 6 勉強会(4) -プレゼンテーション- 担当者:@georgenano George OKADA 2012/05/30
  • 2. 目次 プレゼンテーション 第10章:JavaServer Faces 第11章:ページとコンポーネント @georgenano 第12章:処理とナビゲーション ビジネスロジック 相互運用 第06章:Enterprise Java Beans 第07章:セッションBeanとタイマサービス @inatus 第13章:メッセージの送信 第08章:コールバックとインターセプタ 第14章:SOAP Webサービス 第09章:トランザクションとセキュリティ 第15章:RESTful Webサービス 永続化 第02章:Javaと永続化 @making 第03章:ORM 第04章:永続性オブジェクトの管理 @kjstylepp 第05章:コールバックエリア 12/05/30 Beginning JavaEE6 勉強会(4) 2
  • 3. 第10章 JavaServer Faces 12/05/30 Beginning JavaEE6 勉強会(4) 3
  • 4. JSF(JavaServer Faces)とは JavaServer Faces (JSF) is a user interface (UI) framework for Java web applications. [2] HTTP リクエスト XUL ④ コンバータ ブラウザ (Ajax) ① ③ JSP コンバータ XHTML HTML ⑦ Faces レンダラ JavaScript Servlet CSS ② ⑤ HTTP バリデータ バリデータ レスポンス faces- ① マネージド config.xml (オプション) Bean ⑥ [1] ※但し、赤文字は発表者が追記した 12/05/30 Beginning JavaEE6 勉強会(4) 4
  • 5. 参考|StrutsとJSFとの比較 Struts JSF1.2 JSF2.0 struts-config.xml faces-config.xml マネージドBeanなどへの アノテーション DispatchAction メソッドバインディング メソッドバインディング アクションマッピング faces-config.xmlの マネージドBeanなどへの navigation-rule アノテーション ActionForm マネージドBean マネージドBean [3] ※発表者がJSF2.0の列を追加した 12/05/30 Beginning JavaEE6 勉強会(4) 5
  • 6. ①FacesServletとfaces-config.xml (第12章に詳解) FacesServlet: ‣MVCモデルのコントローラの役割 ‣ユーザからのリクエストに応じて、マネージドBean上で定義したアク ションを実行する ‣JSF実装の内部に存在し、利用者が直接触ることはできない ➡JSFの利用者は気にしなくてもよい faces-config.xml: ‣後述するマネージドBeanの一覧や、画面遷移情報を記述する設定 ファイル ‣JSF2.0からはマネージドBeanにアノテーションをつけることで同様の 意味となるため、省略可能になった ➡JSF2.0の利用者は気にしなくてもよい 12/05/30 Beginning JavaEE6 勉強会(4) 6
  • 7. ①FacesServletとfaces-config.xml (第12章に詳解) faces-config.xmlのサンプル <?xml version="1.0" encoding=‘UTF-8’?> <faces-config xmlns=”http://java.sun.com/xml/ns/javaee” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://java.sun.com/xml/nsjavaee http://java.sun.com/xml/ns/javaee/web-faceconfig_2_0.xsd” version=”2.0”> <managed-bean> <managed-bean-name>BookController</managed-bean-name> <managed-bean-class>BookController</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> <navigation-rule> <from-view-id>newBook.xhtml</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>listBooks.html</to-view-id> </navigation-case> </navigation-rule> </faces-config> 12/05/30 Beginning JavaEE6 勉強会(4) 7
  • 8. ②ページとコンポーネント (第11章に詳解) ページ: ‣MVCモデルのビューの役割 ‣ページ宣言言語にはFaceletsの利用が推奨(JSPも利用可) コンポーネント: ‣ページを記述するための構成要素 ‣例:<h:head>, <h:body>, <h:outputLabel>... [3] 12/05/30 Beginning JavaEE6 勉強会(4) 8
  • 9. ③レンダラ レンダラ: ‣ユーザーインターフェイスの構造を、デバイスに適合したユーザーイン ターフェイスの表現形式に変換するクラスのこと [3] ‣レンダラの例:HTML4.01関連レンダラ、ワイヤレス・マークアップ言 語(WML)、Scalable Vector Graphics(SVG)... ➡JSFの利用者は(それほど)気にしなくて良い [3] 12/05/30 Beginning JavaEE6 勉強会(4) 9
  • 10. ④コンバータと⑤バリデータ (第12章に詳解) コンバータ: ‣次の2つの役割 (1)画面から入力された文字列を マネージドBeanのプロパティの型のオブ ジェクトに 変換 (2)マネージドBeanのプロパティの型のオブジェクトを レンダラ用の文字 列に 変換 ‣変換時にエラーが発生した場合、エラーメッセージを返却 バリデータ: ‣ユーザが入力した値が有効か否か検証する役割 ‣複数のバリデータを1つのコンポーネントに関連付け可能 ‣検証時にエラーが発生した場合、エラーメッセージを返却 12/05/30 Beginning JavaEE6 勉強会(4) 10
  • 11. ⑥マネージドBeanと画面遷移 (第12章に詳解) マネージドBean: ‣画面遷移、EJB呼出、コンポーネントとデータの同期、ビジネスロジック を行う役割 ➡JSFの肝 マネージドBeanの例 @ManagedBean(name = “bookController”) public class BookController { @EJB private BookEJB bookEJB; private Book book = new Book(); public String doCreateBook(){ book = bookEJB.createBook(book); return “listBooks.xhtml”; } // bookのゲッター、セッター } マネージドBeanのページからの利用例 <h:inputText value=”#{bookController.book.isbn}”/> <h:outputText value=”#{bookController.book.isbn}”/> <h:commandButton value=”Create” action=”#{bookController.doCreateBook}”/> 12/05/30 Beginning JavaEE6 勉強会(4) 11
  • 12. ⑦Ajaxサポート (第12章で詳解) Ajaxサポート: ‣非同期でページの一部を少しずつ更新する技術 ‣JSF2.0からは標準仕様でAjaxがサポートされた ‣<f:ajax>タグを利用することで非同期処理が可能に 12/05/30 Beginning JavaEE6 勉強会(4) 12
  • 13. Exercise①|サンプルプログラムの確認 目的:サンプルプログラムの概要を把握する 課題:サンプルプログラムの中身を確認する 準備:https://svn.kenai.com/svn/beginningee6~src/book/trunk/ chapter10からチェックアウトして、「依存関係で構築」 手順: 1.「プロジェクトを実行」してサンプルアプリの挙動を確認 2.Book.java, BookEJB.java, BookController.javaの中身を確認 3.newBook.xhtml, listBooks.xhtmlの中身を確認 4.faces-config.xmlが無く、BookController.javaに「@ManagedBean」アノ テーションがある事を確認 12/05/30 Beginning JavaEE6 勉強会(4) 13
  • 14. Exercise②|書籍情報の追加 目的:JSFの概要を把握する 課題:書籍情報に「著者名」を追加する 手順: Chapter10プロジェクトの各ソースを変更 1.Bookエンティティへ「著者名」を追加 2.BookEJB, BookControllerに影響が及ばないことを確認 3.newBook.xhtml, listBooks.xhtmlへ「著者名」を追加 12/05/30 Beginning JavaEE6 勉強会(4) 14
  • 15. 第11章 ページとコンポーネント 12/05/30 Beginning JavaEE6 勉強会(4) 15
  • 16. 【再掲】JSF(JavaServer Faces)とは JavaServer Faces (JSF) is a user interface (UI) framework for Java web applications. [2] HTTP リクエスト XUL ④ コンバータ ブラウザ (Ajax) ① ③ JSP コンバータ XHTML HTML ⑦ Faces レンダラ JavaScript Servlet CSS ② ⑤ HTTP バリデータ バリデータ レスポンス faces- ① マネージド config.xml (オプション) Bean ⑥ [1] ※但し、赤文字は発表者が追記した 12/05/30 Beginning JavaEE6 勉強会(4) 16
  • 17. 準備 以下では実例のソースを見ながら、(適宜、結果をブラウザなど で表示しながら)説明をお聞きください 1.https://svn.kenai.com/svn/beginningee6~src/book/trunk/chapter11 からチェックアウト 2.「プロジェクトを実行」 3.http://localhost:8080/chapter11/から結果を確認 12/05/30 Beginning JavaEE6 勉強会(4) 17
  • 18. HTML Hypertext Markup Language(HTML): ‣Webページで最も使用されている言語 ‣通常<HTML>や<BODY>タグが必要だが、省略されてもブラウザは 表示してくれる ‣XML的には無効な場合が多く、検証できない ‣XML的には無効な例 ‣必要なタグがない ‣終了タグがない ‣タグに大文字と小文字が混在している ‣実例:ex01/newBook.html 12/05/30 Beginning JavaEE6 勉強会(4) 18
  • 19. XHTML eXtensible HyperText Markup Language(XHTML): ‣Webページの推奨言語 ‣厳密なXML構文規則に則っている ‣XML構文規則とスキーマ制約の検証で管理、解析が用意 ‣XML的には有効にした例 ‣必要なタグを記述している ‣終了タグを記述している ‣タグを小文字で統一している ‣実例:ex01/newBook.xhtml 12/05/30 Beginning JavaEE6 勉強会(4) 19
  • 20. CSS Cascading Style Sheets(CCS): ‣ドキュメントのプレゼンテーションを表現するスタイル言語 ‣色、フォント、レイアウトなどのデザインを定義 ‣ドキュメントのコンテンツとデザインを分離可能になる ‣実例:ex01/newBookWithCSS.xhtml 12/05/30 Beginning JavaEE6 勉強会(4) 20
  • 21. JavaScript JavaScript: ‣クライアント側のWeb開発に使用するスクリプト言語 ‣クライアント側で動的コンテンツを提供可能 ‣実例:ex01/newBookWithJavascript.xhtml ‣必須入力項目(価格情報)が正しく入力されているか検証 12/05/30 Beginning JavaEE6 勉強会(4) 21
  • 22. JSP JavaServer Pages(JSP): ‣クライアントのリクエストに対するレスポンスを動的に生成する言語 ‣サーバ側で保持されるDBやEJBを利用可能 ‣サーバ側で処理され、サブレットとしてコンパイルされる ‣コンパイルされた結果はHTML、XHTMLの両方ある ‣ビジネスロジックとプレゼンテーションが混じっており、開発・保守が難 しい ‣基本構文:�<%@ ディレクティブ %>, <%! 宣言 %>, <% スクリプトレット %>, <%= 式 %> ‣実例:ex05/listBooks.jsp ex05/listBooks.jspx 12/05/30 Beginning JavaEE6 勉強会(4) 22
  • 23. 式言語(EL)とJSP Standard Tag Library Expression Language(EL式): ‣JSPのスクリプト要素と同様のアクションを実行する簡単な構文の言語 ‣基本構文:�${expr} JSP Standard Tag Library(JSTL): ‣JSPでよく使われるタグのライブラリ ‣JavaコードとXHTMLタグの混在を避ける事ができる ‣オブジェクトに対する値の設定、例外ハンドリング、条件付き処理、繰 り返し処理、DBアクセス... ‣コアアクション:<c:out>, <c:if>, <c:forEach>... ‣実例: ex06/checkNumbers.jsp 12/05/30 Beginning JavaEE6 勉強会(4) 23
  • 24. Facelets Facelets: ‣JSPに代わってビューを記述できるテンプレートフレームワーク ‣XHTMLとFaceletsの標準タグ(ui接頭辞)で記述する ‣実例:ex11/newBook.xhtml ex11/layout.xhtml Faceletsのタグ [1] ※一部の説明を簡略化した タグ 説明 <ui:composition> テンプレートを使用するコンポジションの定義 <ui:component> コンポーネントの作成 <ui:debug> デバッグ情報の取得 <ui:define> テンプレートを使用し、ページに挿入するコンテンツを定義 <ui:decorate> ページ内の一部コンテンツを装飾 <ui:fragment> ページ内のフラグメントの追加 <ui:include> <jsp:include>と同様 <ui:insert> テンプレートにコンテンツを挿入 <ui:param> インクルードしたファイルまたはテンプレートにパラメータを渡す <ui:repeat> <c:foreach>と同様 <ui:remove> ページからコンテンツを削除 12/05/30 Beginning JavaEE6 勉強会(4) 24
  • 25. JavaServer Faces JavaServer Faces: ‣a user interface (UI) framework for Java web applications.[2] ‣下記以外のJSTLは未サポート ‣実例:htmlcomponents.xhtml(HTML components) FaceletsをPDLとして使用するページで使用可能なタグライブラリ [1] ※一部の説明を簡略化した URI 接頭辞 説明 http://java.sun.com/jsf/html h このタグライブラリはコンポーネントとHTMLレンダラを含む http://java.sun.com/jsf/core f このライブラリは特定のレンダリングに依存しないカスタムアクショ ンを含む http://java.sun.com/jsf/facelets ui このライブラリのタグはテンプレート化のサポートを追加 http://java.sun.com/jsf/composit composit このタグライブラリは複合コンポーネントの宣言と定義に使用 http://java.sun.com/jsp/jstl/core c FaceletsページはJSPコアタグライブラリの一部を使用可能 http://java.sun.com/jsp/jstl/functions fn Faceletsページは全てのJSP関数タグライブラリを使用可能 12/05/30 Beginning JavaEE6 勉強会(4) 25
  • 26. 第12章 処理と画面遷移 12/05/30 Beginning JavaEE6 勉強会(4) 26
  • 27. 【再掲】JSF(JavaServer Faces)とは JavaServer Faces (JSF) is a user interface (UI) framework for Java web applications. [2] HTTP リクエスト XUL ④ コンバータ ブラウザ (Ajax) ① ③ JSP コンバータ XHTML HTML ⑦ Faces レンダラ JavaScript Servlet CSS ② ⑤ HTTP バリデータ バリデータ レスポンス faces- ① マネージド config.xml (オプション) Bean ⑥ [1] ※但し、赤文字は発表者が追記した 12/05/30 Beginning JavaEE6 勉強会(4) 27
  • 28. ①FacesServlet javax.faces.webapp.FacesServlet ‣JSFにおけるjavax.servlet.Servletの実装 ‣全てのユーザからのリクエストはこのコントローラを経由する FacesServletの相互作用 [1] Lifecycle 3: 6つのフェーズで利用する 2: 制御をライフサイクルに渡す FacesContext 1: FacesContextを生成する 画面の イベント FacesServlet ボタン 12/05/30 Beginning JavaEE6 勉強会(4) 28
  • 29. FacesContext javax.faces.context.FacesContext ‣リクエストの処理と対応するレスポンスの作成に関連付けるコンテキス ト情報 ‣マネージドBeanでgetCurrentInstance()で取得できる FacesContextのメソッドの一部 [1] メソッド 説明 addMessage メッセージの追加 getApplication Webアプリケーションと関連付けられるApplicationインスタンスの取得 getAttributes FacesContextインスタンスと関連付けられる属性をMapで取得 getCurrentInstance 現在のスレッドが処理するリクエストのFacesContextインスタンスの取得 getELContext 現在のFacesContextインスタンスのELContextインスタンスの取得 getMaximumSeverity キューに登録されているFacesMessageの重要度の最大値を取得 getMessage FacesMessageコレクションの取得 getPartialViewContext リクエストのPartialViewContextオブジェクトの取得 getViewRoot リクエストに関連付けられているルートコンポーネントを取得 release FacesContextインスタンスに関連付けられるリソースの解放 12/05/30 Beginning JavaEE6 勉強会(4) 29
  • 30. JavaServer Facesページの6つのライフサイクル 利用者は 気にしない コンバータ レスポンス バリデータ レスポンス リクエスト ビュー 入力値 イベント 検証 イベント の復元 の適用 の処理 の処理 の処理 レスポンス レスポンス レスポンス レスポンスの イベント アプリの イベント モデル値 レンダリング の処理 呼出し の処理 の更新 コンバータ マネージドBean 利用者は 型変換または 気にしない 検証のエラー [1] ※赤文字は発表者が追記し た JSFライフサイクルにおける6つのフェーズ [4] フェーズ名 説明 ビューの復元 リクエストに基づいて、ページのUIViewRootコンポーネントツリーを作成(復元)する 入力値の適用 送信されたフォーム値をUIコンポーネントに適応する 検証処理 UIコンポーネントに関連付けられたバリデータ(データ検証)を行う モデル値の更新 入力の適用でUIコンポーネントと関連付けられた値をマネージドBeanに更新する アプリの呼出し マネージドBeanのイベントメソッドを起動し、ビジネスロジックを処理する レスポンスのレンダリング 処理結果をHTMLなどにレンダリングを行い、レスポンスとして返す 12/05/30 Beginning JavaEE6 勉強会(4) 30
  • 31. ④コンバータ javax.faces.convert.* ‣UIコンポーネントの値と対応するプリミティブ型を相互自動変換 ‣使い方: ‣<f:convertDataTime pattern=”MM/dd//yy”/> ‣実例:ex12/newBook.xhtml ‣プリミティブ型ではない場合、独自コンバータを作成する必要有 ➡カスタムコンバータという カスタムコンバータ ‣作り方:javax.faces.convert.Convertインターフェースを実装したク ラスに、@FacesConverterアノテーションを付与する ‣使い方:<f:converter converterId=”カスタムコンバータ名”/> 12/05/30 Beginning JavaEE6 勉強会(4) 31
  • 32. ⑤バリデータ javax.faces.validator.* ‣ユーザの入力を検証する ‣使い方:<f:validateLength minimum=”2” maximum=”20”/> ‣標準バリデータで満足できない場合、独自バリデータを作成する必要 有 ➡カスタムバリデータという カスタムバリデータ ‣作り方:javax.faces.validator.Validatorインターフェースを実装し たクラスに、@FacesValidatorアノテーションを付与する ‣使い方:<f:validator validatorId=”カスタムバリデータ名”/> 12/05/30 Beginning JavaEE6 勉強会(4) 32
  • 33. Exercise③|発行日の追加とタイトルの文字数チェック 目的:コンバータとバリデータの使い方を把握する 課題:書籍情報に「発行日」を追加し、「タイトル」が2文字以上20文字以下チェック を追加する 手順:Exercise②の結果のソースに以下を実施 1.BookエンティティへのDate型の「発行日」追加 ‣「@Temporal」の付与不足を忘れずに 2.BookEJB, BookControllerマネージドBeanの確認 3.newBook.xhtml, listBooks.xhtmlへの「発行日」追加 4.newBook.xhtmlへの標準コンバータ「convertDateTime」タグの追加 ‣htmlタグ内に「xmlns:f="http://java.sun.com/jsf/core"」追加 5.newBook.xhtmlへの標準バリデータ「validateLength」タグの追加 12/05/30 Beginning JavaEE6 勉強会(4) 33
  • 34. ⑥マネージドBean 作り方: ‣@ManagedBeanアノテーションをクラスに付与 ‣JSF1.2まではfaces-config.xmlへのエントリが必要だった 役割: ‣状態の保持�book属性 ‣ページで参照するアクションメソッドの定義�doCreateBook() ‣画面遷移�return “listBooks.xhtml” 必要条件: ‣スコープの設定が必要。設定しないと@RequestScopeを使用 ‣クラスをpublicとして定義。finalやabstractの定義は不可 ‣クラスは引数なしのパブリックコンストラクタが必要 ‣クラス中でfinalize()メソッドの定義は不可 ‣属性はパブリックのゲッター、セッターが必要 12/05/30 Beginning JavaEE6 勉強会(4) 34
  • 35. ⑦Ajax 概要:JSF2.0からAjaxが標準仕様になった 使い方: ‣準備:標準仕様で定義されたJavaScriptライブラリ(jsf.js)を使用 ‣<h:outputScript name=”jsf.js” library=”javax.faces” target=”head”/> ‣使用したいタグ内で<f:ajax>タグを使用する ‣<f:ajax execute=”@form” render=”:bookList”/> ‣実例:Chapter12/ex14/newBook.xhtml 12/05/30 Beginning JavaEE6 勉強会(4) 35
  • 36. Exercise④|書籍情報を非同期で表示する機能 目的:マネージドBeanとAjaxの使い方を把握する 課題:書籍情報を非同期で表示する機能を追加する 手順:Exercise③の結果のソースに以下を実施 1.newBook.xhtmlに非同期で表示する機能を追加 ‣listBooks.xhtmlから必要部分をコピペ ‣ボタンタグ内に<f:ajax>タグを追加 ‣renderとid 2.BookController.javaの遷移先を変更 12/05/30 Beginning JavaEE6 勉強会(4) 36
  • 37. 引用文献 [1] Antonio Goncalves 著, 日本オラクル株式会社 監訳「Beginning Java EE 6」2012年, 翔泳社 [2] Java Community Process「JSR-000314 JavaServerTM Faces 2.0(Final Release)」http:// jcp.org/aboutJava/communityprocess/final/jsr314/index.html [3] 佐藤治夫, 小泉守義 「ThinkIT JDeveloperで学ぶJSF入門 第2回:JSFを構成する要素」http:// thinkit.co.jp/free/article/0607/8/2/ [4] Syboos.jp編集長 「ライフサイクルから理解するJSFの仕組み」 http://www.syboos.jp/jsf/doc/ phase-in-lifecycle.html 12/05/30 Beginning JavaEE6 勉強会(4) 37

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n