Strutsから移行する人のためのjsf基礎

70
Strutsから 移行する人のための JSF基礎 @megascus #html5biz #jjug 1399日月曜日

description

2013/9/9に発表した内容です。 #html5biz #jjug

Transcript of Strutsから移行する人のためのjsf基礎

Page 1: Strutsから移行する人のためのjsf基礎

Strutsから移行する人のための

JSF基礎@megascus

#html5biz #jjug

13年9月9日月曜日

Page 2: Strutsから移行する人のためのjsf基礎

自己紹介

•久保智(@megascus)

•グロースエクスパートナーズ所属/JJUG幹事

•業務系SE

13年9月9日月曜日

Page 3: Strutsから移行する人のためのjsf基礎

注意

13年9月9日月曜日

Page 4: Strutsから移行する人のためのjsf基礎

HTML5とか出てきません

ごめんなさい!

13年9月9日月曜日

Page 5: Strutsから移行する人のためのjsf基礎

Java EE6(JSF2.0)の範囲です

Java EE 7?なんのことです?

13年9月9日月曜日

Page 6: Strutsから移行する人のためのjsf基礎

Java EE 7(JSF2.2)の話が聞きたい人は

13年9月9日月曜日

Page 7: Strutsから移行する人のためのjsf基礎

11/9のJJUG CCCへ!(@den2snさんよろしく!)

13年9月9日月曜日

Page 8: Strutsから移行する人のためのjsf基礎

Struts2 is not Struts

13年9月9日月曜日

Page 9: Strutsから移行する人のためのjsf基礎

JSFの概要

13年9月9日月曜日

Page 10: Strutsから移行する人のためのjsf基礎

JSFとは何か

13年9月9日月曜日

Page 11: Strutsから移行する人のためのjsf基礎

JSFとは何か

• 2004年にv1.0がリリースされた

• Strutsのメイン開発者が仕様策定に参加

• Java EE 5からJava EEの標準UIフレームワークに

13年9月9日月曜日

Page 12: Strutsから移行する人のためのjsf基礎

なぜJSFか

13年9月9日月曜日

Page 13: Strutsから移行する人のためのjsf基礎

なぜJSFか

• Ajaxの使用を前提に設計されているため、リッチなUIを作りやすい

• Strutsと骨子が似ているため、要素だけ理解していればStrutsから移行しやすい

• Java EEの標準のためベンダーのサポートを受けやすい

13年9月9日月曜日

Page 14: Strutsから移行する人のためのjsf基礎

JSFで作成できるUI

13年9月9日月曜日

Page 15: Strutsから移行する人のためのjsf基礎

JavaScriptレスなAjaxを使用したUI

13年9月9日月曜日

Page 16: Strutsから移行する人のためのjsf基礎

JavaScriptレスなAjaxを使用したUI

Ajaxを使用したエラーメッセージの表示

13年9月9日月曜日

Page 17: Strutsから移行する人のためのjsf基礎

JavaScriptレスなAjaxを使用したUI

<h:inputText id="startedDate" value="#{someBean.startDate}" required="true" > <f:convertDateTime pattern="yyyy/MM/dd" />

<f:ajax event="blur" render="startedDateError" /></h:inputText><h:message id="startedDateError" for="startedDate" styleClass="errorMessage"/>

f:ajaxによる部分描画変更のサポート

13年9月9日月曜日

Page 18: Strutsから移行する人のためのjsf基礎

もっとリッチなUIを作りたい

13年9月9日月曜日

Page 19: Strutsから移行する人のためのjsf基礎

JSFの拡張ライブラリを使う

13年9月9日月曜日

Page 20: Strutsから移行する人のためのjsf基礎

JSFの拡張ライブラリを使う

•Prime Faces

•Rich Faces

•Ice Facesその他(都合により省略)

13年9月9日月曜日

Page 21: Strutsから移行する人のためのjsf基礎

Prime Faces

13年9月9日月曜日

Page 22: Strutsから移行する人のためのjsf基礎

Prime Faces

•トルコのPrime Technology社が開発しているOSSのライブラリ

•日本だと @kikutaro_ さんが一番詳しいのでブログを参照して下さい。

http://kikutaro777.hatenablog.com/

13年9月9日月曜日

Page 23: Strutsから移行する人のためのjsf基礎

詳しくはデモを見て下さいhttp://www.primefaces.org/showcase/ui/home.jsf

13年9月9日月曜日

Page 24: Strutsから移行する人のためのjsf基礎

Rich Faces

13年9月9日月曜日

Page 25: Strutsから移行する人のためのjsf基礎

Rich Faces

• JBossが開発しているOSSのライブラリ

•前はAjax4Jsfと呼ばれていた

•日本ではオープンに情報発信をしている人はいないけど、オープン度ではPrime Facesより上

13年9月9日月曜日

Page 26: Strutsから移行する人のためのjsf基礎

詳しくはデモを見て下さいhttp://livedemo.exadel.com/richfaces-demo/

13年9月9日月曜日

Page 27: Strutsから移行する人のためのjsf基礎

JSFの拡張ライブラリを使用する上での注意

13年9月9日月曜日

Page 28: Strutsから移行する人のためのjsf基礎

JSFの拡張ライブラリを使用する上での注意

•基本的に最新版のブラウザしかサポートしない(素のJSF

だとIE8ぐらいから動くのですが)

•ブラウザの最新化をがんばりましょう

13年9月9日月曜日

Page 29: Strutsから移行する人のためのjsf基礎

JSFの構成要素

13年9月9日月曜日

Page 30: Strutsから移行する人のためのjsf基礎

Strutsの頃はこんな感じでした

13年9月9日月曜日

Page 31: Strutsから移行する人のためのjsf基礎

Strutsの構成要素

• Action、ActionForm

• JSP+タグライブラリ(jstl、struts-tags)

• commons-validator(入力値の検証)

• Struts-tiles(UIの部品化)

• RequestProcesser

13年9月9日月曜日

Page 32: Strutsから移行する人のためのjsf基礎

Struts→JSF

• Action、ActionForm→managed-bean

• JSP+タグライブラリ→XHTML+タグライブラリ

• commons-validator→JSF Validator+Bean Validator

• Struts-tiles→ui composition

• RequestProcesser→Phase Listener

13年9月9日月曜日

Page 33: Strutsから移行する人のためのjsf基礎

managed-bean

13年9月9日月曜日

Page 34: Strutsから移行する人のためのjsf基礎

managed-bean

• StrutsではActionFormとActionとで分かれていた入力値と処理をJSFでは一つにまとめて記述できるようになった

• Strutsではxmlでしか定義できなかったものがJSFではxml

に加えてアノテーションでも定義できるようになった

13年9月9日月曜日

Page 35: Strutsから移行する人のためのjsf基礎

アノテーションベースのmanaged-beanの例

@Named("someBean")//動かない場合は@ManagedBean

@SessionScopedpublic class SomeBean implements Serializable {

public String execute() { //do something.... }

13年9月9日月曜日

Page 36: Strutsから移行する人のためのjsf基礎

XHTML+タグライブラリ

13年9月9日月曜日

Page 37: Strutsから移行する人のためのjsf基礎

XHTML+タグライブラリ

<h:form> <h:inputText id="id" value="#{someBean.id}" /> <h:commandLink action="#{someBean.execute}" value="button" /> </h:form>

13年9月9日月曜日

Page 38: Strutsから移行する人のためのjsf基礎

XHTML+タグライブラリ

• JSPと違いServletには変換されなくなった

•エラーが発生した時にスタックトレースにXHTMLの行番号がそのまま出るのでエラーを追いやすい

13年9月9日月曜日

Page 39: Strutsから移行する人のためのjsf基礎

JSF Validator + Bean Validator

13年9月9日月曜日

Page 40: Strutsから移行する人のためのjsf基礎

JSF Validator + Bean Validator

•バリデーション定義を画面に直接記載するJSF Validator

•バリデーション定義をプロパティに直接記載するBean

Validator

•定義と実際に使う場所が近くなりました

13年9月9日月曜日

Page 41: Strutsから移行する人のためのjsf基礎

JSF Validator

<h:inputText id="name" value="#{someBean.name}" required="true" requiredMessage= "name is required." validator="#{someBean.valid}" label= "message" >

13年9月9日月曜日

Page 42: Strutsから移行する人のためのjsf基礎

JSF Validator

public void validate(FacesContext context, UIComponent component, Object newValue) { // some error check. if (hasError) { throw new ValidatorException("error message."); } }

13年9月9日月曜日

Page 43: Strutsから移行する人のためのjsf基礎

Bean Validator

@NotNull @Size(min=0, max=8) private String name;

アノテーションベースのエラーチェック

13年9月9日月曜日

Page 44: Strutsから移行する人のためのjsf基礎

ui composition

13年9月9日月曜日

Page 45: Strutsから移行する人のためのjsf基礎

ui composition

•いわゆるテンプレート機能

•特に珍しい機能でもないので省略

13年9月9日月曜日

Page 46: Strutsから移行する人のためのjsf基礎

Phase Listener

13年9月9日月曜日

Page 47: Strutsから移行する人のためのjsf基礎

Phase Listener

• StrutsのRequestProcesserのprocessXXXXという名前で定義されていたメソッドがそれぞれ別のクラスになった

• Phaseそのもののカスタマイズや前後に処理を挟むことが可能

• Strutsに比べて拡張しやすくなった

13年9月9日月曜日

Page 48: Strutsから移行する人のためのjsf基礎

Phase Listener

• PhaseListenerクラスをimplimentsする形で作成

•フレームワーク作成時にしか作らないと思うので省略

13年9月9日月曜日

Page 49: Strutsから移行する人のためのjsf基礎

JSF利用時の注意

13年9月9日月曜日

Page 50: Strutsから移行する人のためのjsf基礎

JSF利用時の注意

• JSF1.X(Java EE5以前)とJSF2.X(Java EE6以降)は別物

• JSF1.Xを使うぐらいだったらStrutsの方がマシ

※個人の感想です

13年9月9日月曜日

Page 51: Strutsから移行する人のためのjsf基礎

補足デザイナーさんとの協業向けの機能

13年9月9日月曜日

Page 52: Strutsから移行する人のためのjsf基礎

XHTMLにjsfcタグを埋め込むことで動作可能に

<form jsfc="h:form"> 名前を入力してください。 <input type="text" jsfc="h:inputText" value="#{someBean.name}"/> <input type="submit" jsfc="h:commandButton" value="実行" action="#{someBean.execute}"/>

</form>

13年9月9日月曜日

Page 53: Strutsから移行する人のためのjsf基礎

最後に業務系SEからの2つのお願い

13年9月9日月曜日

Page 54: Strutsから移行する人のためのjsf基礎

独自のセッション管理機能は作らないで下さい

•昨今のフレームワークはリッチなユーザーインターフェースを実現するためにセッション機能を多用する

•自前でセッションの永続化をするだけだと万が一の時にフレームワーク部分の復元ができない

•仮に作るならAPサーバーと統合して下さい

13年9月9日月曜日

Page 55: Strutsから移行する人のためのjsf基礎

メモリを大量に積んで下さい

•リッチなUIを実現するために、フレームワークがセッションにデータをたくさん持ちます

•セッションにデータを持つのは業務情報だけじゃない

• Struts時代の2倍から10倍ぐらい積むのがオススメ

13年9月9日月曜日

Page 56: Strutsから移行する人のためのjsf基礎

以上

13年9月9日月曜日

Page 57: Strutsから移行する人のためのjsf基礎

とみせかけておまけ

13年9月9日月曜日

Page 58: Strutsから移行する人のためのjsf基礎

13年9月9日月曜日

Page 59: Strutsから移行する人のためのjsf基礎

Strutsじゃないネタが必要?

13年9月9日月曜日

Page 60: Strutsから移行する人のためのjsf基礎

Scalaか!

13年9月9日月曜日

Page 61: Strutsから移行する人のためのjsf基礎

JSFをScalaで

13年9月9日月曜日

Page 62: Strutsから移行する人のためのjsf基礎

去年のネタJava EE 6 With Scala

http://d.hatena.ne.jp/megascus/20121118/1353234678

13年9月9日月曜日

Page 63: Strutsから移行する人のためのjsf基礎

ふつーに動きます(面白みがないぐらい)

13年9月9日月曜日

Page 64: Strutsから移行する人のためのjsf基礎

感想

13年9月9日月曜日

Page 65: Strutsから移行する人のためのjsf基礎

便利です。

13年9月9日月曜日

Page 66: Strutsから移行する人のためのjsf基礎

良い感想は次の方々が説明してくれると思うので

13年9月9日月曜日

Page 67: Strutsから移行する人のためのjsf基礎

悪い感想

13年9月9日月曜日

Page 68: Strutsから移行する人のためのjsf基礎

ScalaからJavaを使う

• Scala自体が互換性を気にしていないため、バージョンアップで動かなくなることが多い

ScalaとJavaでList(Collection)のClassの互換性が無いため、ScalaからJavaのライブラリを扱うのはそれなりに工数がかかる

13年9月9日月曜日

Page 69: Strutsから移行する人のためのjsf基礎

そんな感じで

13年9月9日月曜日

Page 70: Strutsから移行する人のためのjsf基礎

ありがとうございました

Groovyのこと忘れないで下さい

13年9月9日月曜日