50

Getting Started Java EE from OU

Embed Size (px)

Citation preview

Page 1: Getting Started Java EE from OU
Page 2: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |

Java EE 7 ではじめるWeb アプリケーション開発

日本オラクル株式会社オラクルユニバーシティ岡田 大輔2014 年 8 月 1 日

Page 3: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 3

Safe Harbor StatementThe following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

Page 4: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 4

Java EE とは?

Page 5: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 5

Java Platform, Enterprise Edition• Java SE をベースにした企業システム向けのフレームワーク–オープンな Web システムの構築を支える機能群の標準仕様• コミュニティ主導のエンタープライズ・ソフトウェア標準• コンポーネント仕様とサービスアクセスのための各種 API を規定– 移植性 (Write Once Run Anywhere を担保 )

–Oracle などのベンダーは、 Java EE に準拠した実装としてアプリケーション・サーバーを提供• Oracle WebLogic Server• GlassFish

Page 6: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 6

Java EE 7

Connector1.7 JPA 2.1 JTA 1.2 JMS 2.0

Managed Bean 1.0 EJB 3.2

Common Annotations 1.2 Interceptors 1.2 CDI 1.1

PortableExtensions

Servlet 3.1

JSP 2.3 JSF 2.2 JAX-RS 2.0 EL 3.0

Bean

Val

idati

on 1

.1

Concurrency Utilities (JSR 236)

Batch Application(JSR 352)

Java API forJSON

(JSR 353)

Java API forWebSocket

(JSR 356)

New Updated MajorRelease

Page 7: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 7

Java EE 7 の主な標準仕様標準仕様 開発領域 特徴

JSF 2.2

Web アプリケーション

• リッチなユーザインタフェースの効率的な開発を実現するWeb アプリケーション・フレームワーク

Servlet 3.1 • 冗長な設定・コード記述の削減により開発生産性を向上• 非同期 Servlet による Ajax 対応

EJB 3.2 ビジネスロジック• 冗長な設定・コード記述の削減により開発生産性を向上• より柔軟な制御機能の追加

JPA 2.1 永続化ロジック• 標準 OR マッピング・フレームワーク• Java EE だけでなく Java SE でも使用可能

JAX-RS 2.0 Web サービス • 容易なサービス公開を実現する Web サービス標準仕様

CDI 1.1 全領域• レイヤ間の疎結合化による柔軟性を向上する DI フレーム

ワーク標準仕様

Page 8: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 8

JavaServer Faces とは?• Java EE 標準で提供される Web アプリケーションのための UI フレー

ムワーク–コンポーネント・ベースでユーザー・インタフェースを作成• UI の構成要素は「 UI コンポーネント」として提供される• イベント駆動型プログラミング

–ビュー定義は Facelet (XHTML+JSF タグ ) を使用• テンプレート・エンジン• Ajax をサポート• …

Web アプリケーションを効率良く開発可能に

Page 9: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 9

Web コンテナ

JSF と MVC

HTTP リクエスト

HTTP レスポンス

コントローラー

(Faces Servlet)

ビュー

(Facelet)

モデル

( マネージド Bean)

生成・管理

操作・リダイレクト

アクセス

Page 10: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 10

JSF の構成要素

ブラウザHTML

JavaScriptCSS

FacesServlet

XULJSP

XHTMLコンバータ

バリデータ

マネージドBean

faces-config.xml( オプショ

ン )

レンダラ

HTTPリクエスト

HTTPレスポンス

リクエストの制御とマネージド Bean の呼び出し

レスポンスと生成( デフォルトではHTML 生成 )

ページ記述するFacelet の使用を推奨

入出力の文字列とマネージド Bean のデータ型を変換失敗時はエラーを返す

入力値の有効性を検証失敗時はエラーを返す

画面遷移やコンポーネントとのデータ同期、ビジネスロジックを実行

<f:ajax> タグで Ajax 対応

Page 11: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 11

FacesServlet の役割• MVC モデルのコントローラーに

相当–リクエストに応じて、 JSF ライフサ

イクルを管理するフロント・コントローラー・コンポーネント

– javax.faces.context.FacesContext• リクエスト処理とレスポンス生成に関連

するコンテキスト情報• ライフサイクルの各フェーズで利用され

る 3. 6 つのライフサイクル・フェーズを処理

FacesServlet

Lifecycle

FacesContext

1. FacesContext を生成する

2. 制御を Lifecycleに渡す

Page 12: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 12

JSF のライフサイクル

ビューの復元

入力値の適用 検証処理イベント

処理イベント

処理

レスポンスのレンダリング

イベント処理

イベント処理

アプリケーション

呼び出しモデル値の

更新

HTTPリクエスト

HTTPレスポンス

Page 13: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 13

JSF のライフサイクル• リクエストに基づいてページの UIComponent ツリーを作成 ( 復元 ) する

( 初期リクエスト時は作成、ポスト・バック時は復元 )ビューの復元• 送信されたフォームの値を UI コンポーネントに適用する

文字列データを Java データ型に変換 ( コンバータ )入力値の適用

• UIComponent に関連付けられた検証 ( バリデータ ) を行う検証処理• 入力値の適用フェーズで適用された UIComponent の値をマネージド Bean

にコピーするモデル値の更新

• マネージド Bean のメソッドを呼び出してビジネスロジックを実行するアプリケーション呼び出し

• マネージド Bean の値を読み取り (EL 式 ) 、レスポンスを返すレスポンスのレンダリング

Page 14: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 14

Web コンテナ

JSF&CDI を使用した開発イメージ

HTTP リクエスト

HTTP レスポンス

JSF(Web アプリケーションフレームワーク )

Web アプリケーション

プレゼンテーション アプリケーションロジック• 画面遷移ロジック• 検証ロジック• イベント処理• …

ビジネスロジック• DB アクセス• …

Facelet (XHTML) マネージド Bean(CDI) POJO/EJB/JPA

開発環境

開発・デプロイ

Page 15: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 15

Web アプリケーションを作ってみよう

Page 16: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 16

Web アプリケーション

これから作成するアプリケーションindex.xhtml<h3> 名前と地域を選択してください。 </h3><h:form> <h:outputText value=" 名前 : "/> <h:inputText id="it1" value="#{helloBean.name}" /> <br/> <h:outputText value=" 地域 : " /> <h:selectManyCheckbox id="cb1" value="#{helloBean.choice}"> <f:selectItems value="#{helloBean.options}" /> </h:selectManyCheckbox> <h:commandButton value=" 送信 " action="hello" /> </h:form>

HelloBeanprivate String name;

public void setName(String name) { this.name = name;}public String getName() { return name;}public String toHello() { return "hello";}

hello.xhtml

<h3> メッセージを表示します。 </h3><p> <h:outputText value="#{helloBean.message}" /> <br/> 選択した地域は <ui:repeat value="#{helloBean.choice}" var="data">#{data} </ui:repeat> ですね。</p><h:link value="戻る " outcome="index" />

Prefectureprivate String name;private String capital;private String region;

Page 17: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 17

プロジェクトを作成する (1)

新規プロジェクト を選択

Page 18: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 18

プロジェクトを作成する (2)

Web アプリケーションを選択

Page 19: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 19

プロジェクトを作成する (3)

[Java EE 7] を選択

[JavaServer Faces] を選択

登録されているライブラリで[JSF2.2] を選択

Page 20: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 20

NetBeans の編集画面One Point:

• NetBeans では作成するプログラムをプロジェクトという単位で管理しています

• プロジェクト・ウィンドウには作成したソースコード(.java ファイル )が表示されます

• エディタ・ウィンドウにはソースコードを編集することができます

• 出力ウィンドウにはプログラムの実行結果などが表示されます

プロジェクトウィンドウ

エディタウィンドウ

出力ウィンドウ

Page 21: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 21

<?xml version='1.0' encoding='UTF-8' ?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core"> <h:head> <title>hello</title> </h:head> <h:body> <h2>hello.xhtml</h2> <hr/> <h3> メッセージを表示します。 </h3> <p> <h:outputText value="#{helloBean.message}" /> <ui:repeat value="#{helloBean.choice}" var="data">#{data} </ui:repeat> </p> <h:dataTable value="#{helloBean.country}" var="p" border="1"> <h:column> <f:facet name="header"><h:outputText value="都道府県 "/></f:facet> <h:outputText value="#{p.name}" /> </h:column> <h:column> <f:facet name="header"><h:outputText value="都道府県庁所在地 "/></f:facet> <h:outputText value="#{p.capital}" /> </h:column> <h:column> <f:facet name="header"><h:outputText value="地域 "/></f:facet> <h:outputText value="#{p.region}"/> </h:column> </h:dataTable> <h:link value="戻る " outcome="index" /> </h:body></html>

JSF ページ• Web アプリケーションのビュー

を提供– JSF ページは Facelet で記述• XHTML 構文を使用してページを宣言• 複数のタグライブラリを使用可能• ページのテンプレート作成が可能

• Faclet で記述したページは UIComponent として扱われる

UIComponent ツリー

UIRootView

HtmlOutputText

HtmlOutputLink

HtmlDataTable

Facelet

ブラウザ UI

Page 22: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 22

JSF 標準タグライブラリ接頭辞 説明 Namespace URI

composite 複合コンポーネントの宣言と定義するための JSF タグ http://xmlns.jcp.org/jsf/composite

h コンポーネントと HTML レンダラを含む JSF HTML タグ http://xmlns.jcp.org/jsf/html

f 特定のレンダリングに依存しない コア Faces タグ http://xmlns.jcp.org/jsf/core

ui Faclet テンプレート作成のための JSF タグ http://xmlns.jcp.org/jsf/facelets

c JSTL コアライブラリのサブセット http://xmlns.jcp.org/jsp/jstl/core

fn JSTL 関数タグライブラリ http://xmlns.jcp.org/jsp/jstl/functions

Page 23: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 23

JSF ページの作成One Point:

• オプション : で指定するJSF ページのビュー記述言語は Faclets を選択します

• JSP も使用可能ですが、 Faclets をオススメします

Page 24: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 24

index.xhtml を書いてみよう

<?xml version='1.0' encoding='UTF-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html"> <h:head> <title>hello</title> </h:head> <h:body> <h2> <h:outputText value="index.xhtml" /> </h2> <hr /> <h3> 名前を入力してください。 </h3> <h:form> 名前 : <h:inputText id="it1" value="#{helloBean.name}" /> <h:commandButton value=" 送信 " action="hello" /> </h:form> </h:body></html>

<h:outputText>

<h:commandButton>

<h:inputText>

index.xhtml

Page 25: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 25

<h:form> 名前 : <h:inputText value="#{helloBean.name}" /> <h:commandButton id="subimt" value=" 送信 "                   action="hello" /></h:form>

フォームの作成 <h:form> タグ

遷移先の JSF ページを指定

入力した値は、 HelloBeanオブジェクトの変数 name に格納される

Page 26: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 26

One Point: 日本語の入力を処理するには?• デプロイメント記述子 (glassfish-web.xml) でエンコーディングを指定

WEB-INF/glassfish-web.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN” "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"><glassfish-web-app error-url="">

<parameter-encoding default-charset="UTF-8" /></glassfish-web-app>

Oracle WebLogic Server でもデプロイメント記述子 (weblogic.xml) で同様の設定ができます

Page 27: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 27

その他の JSF タグ

<h:commandButton>

<h:inputText><h:outputText>

<h:dataTable>

<h:column>

<h:commandLink>

<h:inputSecret>

<h:selectBooleanCheckbox>

<h:selectOneListbox>

<h:selectOneRadio>

<h:selectManyCheckBox>

Page 28: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 28

その他の JSF タグJSF タグ HTML タグ

テキストフィールド(パスワード )

<h:inputSecret value="" /> <input type="password" name="j_idt6:j_idt11" value="" />

ラジオボタン

<h:selectOneRadio value=""> <f:selectItem itemValue="i1" itemLabel="男性 "/> <f:selectItem itemValue="i2" itemLabel="女性 "/></h:selectOneRadio>

<input type="radio" name="j_idt6:j_idt16" id="j_idt6:j_idt16:0" value="i1" /> <label for="j_idt6:j_idt16:0"> 男性 </label>

<input type="radio" name="j_idt6:j_idt16" id="j_idt6:j_idt16:1" value="i2" /> <label for="j_idt6:j_idt16:1"> 女性 </label>

リストボックス

<h:selectOneListbox value=""> <f:selectItem itemValue="ib1" itemLabel="20代 "/> <f:selectItem itemValue="ib2" itemLabel="30代 "/> <f:selectItem itemValue="ib3" itemLabel="40代 "/></h:selectOneListbox>

<select name="j_idt6:j_idt21" size="3"> <option value="ib1">20代 </option> <option value="ib2">30代 </option> <option value="ib3">40代 </option></select>

チェックボックス <h:outputLabel for="cb1" value=" チェック "/><h:selectBooleanCheckbox id="cb1" value="" />

<label for="j_idt6:cb1"> チェック </label><input id="j_idt6:cb1" type="checkbox" name="j_idt6:cb1" />

Page 29: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 29

JSF 2.2 での マークアップの改善<h:form> 名前 : <h:inputText value="#{helloBean.name}" /> <h:commandButton id="subimt" value=" 送信” action="hello" /></h:form>

<form jsf:id="f1"> 名前 : <input type="text" id="it1" jsf:value="#{helloBean.name}" /> <input type="submit" value=" 送信 " jsf:action="hello" /> </form>

HTML タグに接頭辞 jsf で指定すると JSF タグとして認識される(jsf の namespace宣言は xmlns:jsf="http://xmlnx.jcp.org/jsf")

index.xhtml

index.xhtml

Page 30: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 30

JSF での画面遷移•暗黙的ナビゲーション

<h:commandButton id="subimt" value=" 送信 " action="hello" />

hello.xhtml

<h:outputText value=" 何かを表示します " />

index.xhtml

<h:form> <h:inputText id="name"/> <h:commandButton id="subimt" value="送信 " action="hello" /></h:form>

指定された JSF ページに遷移 (静的ナビゲーション )

マネージド Bean のメソッドも指定可能 ( 動的ナビゲーション )

action = "#{helloBean.navigation}"

戻り値の型が void のメソッドの呼び出し、またはメソッドの戻り値が null の場合は呼び出し元のページを表示

遷移先の JSF ページを指定できる

HelloBean

public String navigation() {

return "hello";}

遷移先のページを戻り値で指定

index.xhtml

Page 31: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 31

マネージド Bean の作成One Point:

• マネージド Bean は、 CDI Bean として作成され、 @Named 注釈とスコープを表す注釈を指定します

• CDI Bean の生成、および破棄はコンテナによって管理されます

Page 32: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 32

マネージド Bean (CDI) のスコープスコープ スコープをあらわす注釈 有効期間

request @RequestScoped HTTP リクエストを受けてからレスポンスを返すまでの間

session @SessionScoped HTTP セッションが有効な間

application @ApplicationScoped Web アプリケーションが起動してから終了するまでの間

conversation @ConversationScoped Conversation.begin() から Conversation.end() を実行するまでの間

dependent @Dependent インジェクション先のライフサイクルと同じ  ( デフォルト )

CDI Bean は注釈で指定された期間で、コンテナによってインスタンス化・破棄されます

Page 33: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 33

マネージド Bean (CDI) の実装import javax.enterprise.context.RequestScoped;import javax.inject.Named;

@Named(value = "helloBean")@RequestScopedpublic class HelloBean {

private List<SelectItem> options;

public List<SelectItem> getOptions() { return options; }

public String toIndex() { return "index"; }

// options の初期化処理 …}

One Point:変数 options の初期化は @PostConstruct 注釈がついたメソッドでも行うことができます

@PostConstruct public void init() { String[] category = {"北海道 ", "東北 ", " 関東 ", "中部 ", "近畿 ", "中国 ", "四国 ", "九州 "}; options = new LinkedList<>(); for (String var : category) { options.add(new SelectItem(var, var)); } }

@Named 注釈とスコープの注釈を指定( スコープの注釈はできるだけ省略しない )

画面遷移を行うメソッド

hello.xhtml

Page 34: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 34

マネージド Bean (CDI) にアクセスする<?xml version='1.0' encoding='UTF-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.orag/jsf/core"> <h:head> <title>hello</title> </h:head> <h:body> <h2> <h:outputText value="hello.xhtml" /> </h2> <hr /> <h3> メッセージを表示します。 </h3> <p> <h:outputText value="#{helloBean.message}" /> <br/> 選択した地域は <ui:repeat value="#{helloBean.choice}" var="data">#{data} </ui:repeat> ですね。 </p> … 途中略 …

マネージド Beanへのアクセスは EL 式を使います

hello.xhtml

Page 35: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 35

EL 式の使い方

<ui:repeat value="#{helloBean.choice}" var="data">#{data} </ui:repeat>

JSF の EL 式の構文は#{ マネージド Bean の名前 . プロパティ名 }

@Named@RequestScopedpublic class HelloBean {

private List<String> choice;

public List<Product> getChoice() { return choice; }

マネージド Bean 名はクラス名 (先頭小文字 )(@Named注釈の value属性で変更可能 )

マネージド Bean のプロパティの getter メソッドを呼び出します

hello.xhtml

Page 36: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 36

<h:dataTable value="#{helloBean.country}" var="p" border="1"> <h:column> <f:facet name="header"> <h:outputText value="都道府県 "/> </f:facet> <h:outputText value="#{p.name}" /> </h:column> … 以下略 … </h:dataTable>

表の生成 <h:dataTable> タグ

HelloBean

private List<Prefecture> country;public List<Prefecture> getCountry() {  return selectedCountry;}

Prrefectureprivate String name;private String capital;private String region;

value 属性には表を生成するデータ ( コレクション )を指定var 属性には、コレクション内の各オブジェクトの参照変数を指定 index.xhtml

Page 37: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 37

<h:dataTable value="#{helloBean.country}" var="p" border="1"> <h:column> <f:facet name="header"> <h:outputText value="都道府県 "/> </f:facet> <h:outputText value="#{p.name}" /> </h:column> … 以下略 … </h:dataTable>

表の生成 <h:dataTable> タグ

表のヘッダーやフッターは<f:facet> タグで header や footerを指定します。

hello.xhtml

Page 38: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 38

One Point: テンプレートを使用すると、アプリケーションに共通のルック・アンド・フィールを持たせることができます

• <ui:insert> … テンプレートにコンテンツを挿入

• <ui:composition> … 適用するテンプレートの指定

• <ui:define> … テンプレートに挿入 (<ui:insert> を置き換える ) するコンテンツを定義

テンプレートの作成

Page 39: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 39

テンプレートの作成

<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:h="http://xmlns.jcp.org/jsf/html"> <h:head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <h:outputStylesheet name="./css/default.css"/> <h:outputStylesheet name="./css/cssLayout.css"/> <title>hello</title> </h:head> <h:body> <div id="top" class="top"> <ui:insert name="top">Top</ui:insert> </div> <div id="content" class="center_content"> <ui:insert name="content">Content</ui:insert> </div> </h:body></html>

ヘッダー (top)

コンテンツ (content)

template.xhtml

Page 40: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 40

index.xhtml にテンプレートを適用する

<?xml version='1.0' encoding='UTF-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html"> <h:body>        <ui:composition template="./template.xhtml"> <ui:define name="top"> <h2>index.xhtml</h2> </ui:define> <ui:define name="content"> <h3> 名前を入力してください。 </h3> <h:form> <h:outputText value=" 名前 : "/> <h:inputText id="it1" value="#{helloBean.name}" /> <h:commandButton value=" 送信 " action="hello" /> </h:form> </ui:define> </ui:composition> </h:body></html>

[content]

[top]

index.xhtml

<ui:composition> で指定したテンプレートに挿入するコンテンツを定義

Page 41: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 41

JSF での検証と変換処理• JSF ライフサイクル・フェーズで呼び出される• JSF では標準でバリデータやコンバータを提供– Converter クラスや Validator クラスの開発、および Bean Validation も使用可

ビューの復元

入力値の適用 検証処理イベント

処理イベント

処理

レスポンスのレンダリング

イベント処理

イベント処理

アプリケーション

呼び出しモデル値の

更新

HTTPリクエスト

HTTPレスポンス

コンバータ バリデータ

コンバータ

Page 42: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 42

入力値を検証するには? (1)• 入力必須のフィールドの検証を行うには …– UIComponent タグの required 属性を true に設定–検証失敗時のエラーメッセージは requiredMessage 属性で指定できる

• エラーメッセージを表示するには …– <h:messages> タグ、 <h:message> タグを使用– for 属性でどのタグに対するメッセージなのかを指定できる• 対象になる <h:inputText> タグなどにも、 id 属性を追加する

Page 43: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 43

入力値を検証するには? (1)

<h:form> <h:outputText value=" 名前 : "/> <h:inputText id="it1" value="#{helloBean.name}” required="true" requiredMessage=" 名前を入力してください。" /> <br/> <h:commandButton value=" 送信 " action="hello" /> </h:form><h:messages for="it1" style="color: red" />

Page 44: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 44

入力値を検証するには? (2)• 入力値の値の範囲を検証するには …– JSF では標準バリデータ (java.facesvalidator.*)が用意されている–標準バリデータに対応した JSF タグがある• UI コンポーネントタグにバリデータタグをネストして使用

JSF タグ<f:validateLongRange> 整数値の最大値 (maximum) と最小値 (minimum) を検証

<f:validateDoubleRange> 浮動小数点数の最大値 (maximum) と最小値 (minimum) を検証

<f:validateLength> 入力文字数の最大値 (maximum) と最小値 (minimum) を検証

JSF で使用できるタグ

Page 45: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 45

入力値を検証するには? (2)

<h:form> <h:outputText value=" 名前 : "/> <h:inputText id="it1" value="#{helloBean.name}" required="true" requiredMessage=" 名前を入力してください。"> <f:validateLength minimum="2" /> </h:inputText> <br/> <h:commandButton value=" 送信 " action="hello" /> </h:form><h:messages for="it1" style="color: red" />

UIComponent タグの required属性が先に評価される

Page 46: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 46

入力値を変換するには?• フォームに入力された値は String 型で扱われる– UIComponent への反映時に対応したマネージド Bean のデータ型に変換され

る–一般的なデータ型 (数値 , 日付など ) には標準コンバーターが用意されている• マネージド Bean のプロパティ型に基づいて暗黙的に変換される

• 変換するデータ型は converter 属性でも指定可能– converter 属性に指定された型に変換できない場合はエラー・メッセージが表

示されるOne Point:

• 日付や数値に対して標準のコンバーター タグを使うことができます。(<f:dateTimeConverter> タグ , <f:convertNumber> タグ )

Page 47: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 47

入力値を変換するには?

<h:column> <f:facet name="header"> <h:outputText value=" 作成日 " /> </f:facet> <h:outputText value="#{c.creationDate}"> <f:convertDateTime pattern="yyyy-MM-dd HH:mm:ss" timeZone="Japan" /> </h:outputText></h:column>

JST で表示する場合は timeZone 属性を指定

Page 48: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 48

まとめ• JSF は、 Java EE 標準の Web アプリケーション・フレームワークです– JSF でのプレゼンテーションは Facelet で記述します• コンポーネント・ベースのテンプレート・フレームワーク• 豊富な JSF タグを利用できます

– JSF でのページ遷移は、暗黙的なナビゲーションが使用できます• action や outcome に 遷移先 を文字列で指定できます (index.xhtml の場合は index )• マネージド Bean でメソッドを定義する場合も遷移先の文字列を戻り値で返します

–データは マネージド Bean(CDI) で保持できます• CDI Bean はコンテナによってインスタンスのライフサイクルが管理されます

( 適切なスコープを注釈で指定しましょう )• Facelet からは EL 式 を使ってアクセス可能です

Page 49: Getting Started Java EE from OU

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 49

Safe Harbor StatementThe preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

Page 50: Getting Started Java EE from OU