Strutsから移行する人のためのjsf基礎
-
Upload
satoshi-kubo -
Category
Technology
-
view
8.857 -
download
2
description
Transcript of Strutsから移行する人のためのjsf基礎
Strutsから移行する人のための
JSF基礎@megascus
#html5biz #jjug
13年9月9日月曜日
自己紹介
•久保智(@megascus)
•グロースエクスパートナーズ所属/JJUG幹事
•業務系SE
13年9月9日月曜日
注意
13年9月9日月曜日
HTML5とか出てきません
ごめんなさい!
13年9月9日月曜日
Java EE6(JSF2.0)の範囲です
Java EE 7?なんのことです?
13年9月9日月曜日
Java EE 7(JSF2.2)の話が聞きたい人は
13年9月9日月曜日
11/9のJJUG CCCへ!(@den2snさんよろしく!)
13年9月9日月曜日
Struts2 is not Struts
13年9月9日月曜日
JSFの概要
13年9月9日月曜日
JSFとは何か
13年9月9日月曜日
JSFとは何か
• 2004年にv1.0がリリースされた
• Strutsのメイン開発者が仕様策定に参加
• Java EE 5からJava EEの標準UIフレームワークに
13年9月9日月曜日
なぜJSFか
13年9月9日月曜日
なぜJSFか
• Ajaxの使用を前提に設計されているため、リッチなUIを作りやすい
• Strutsと骨子が似ているため、要素だけ理解していればStrutsから移行しやすい
• Java EEの標準のためベンダーのサポートを受けやすい
13年9月9日月曜日
JSFで作成できるUI
13年9月9日月曜日
JavaScriptレスなAjaxを使用したUI
13年9月9日月曜日
JavaScriptレスなAjaxを使用したUI
Ajaxを使用したエラーメッセージの表示
13年9月9日月曜日
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日月曜日
もっとリッチなUIを作りたい
13年9月9日月曜日
JSFの拡張ライブラリを使う
13年9月9日月曜日
JSFの拡張ライブラリを使う
•Prime Faces
•Rich Faces
•Ice Facesその他(都合により省略)
13年9月9日月曜日
Prime Faces
13年9月9日月曜日
Prime Faces
•トルコのPrime Technology社が開発しているOSSのライブラリ
•日本だと @kikutaro_ さんが一番詳しいのでブログを参照して下さい。
http://kikutaro777.hatenablog.com/
13年9月9日月曜日
詳しくはデモを見て下さいhttp://www.primefaces.org/showcase/ui/home.jsf
13年9月9日月曜日
Rich Faces
13年9月9日月曜日
Rich Faces
• JBossが開発しているOSSのライブラリ
•前はAjax4Jsfと呼ばれていた
•日本ではオープンに情報発信をしている人はいないけど、オープン度ではPrime Facesより上
13年9月9日月曜日
詳しくはデモを見て下さいhttp://livedemo.exadel.com/richfaces-demo/
13年9月9日月曜日
JSFの拡張ライブラリを使用する上での注意
13年9月9日月曜日
JSFの拡張ライブラリを使用する上での注意
•基本的に最新版のブラウザしかサポートしない(素のJSF
だとIE8ぐらいから動くのですが)
•ブラウザの最新化をがんばりましょう
13年9月9日月曜日
JSFの構成要素
13年9月9日月曜日
Strutsの頃はこんな感じでした
13年9月9日月曜日
Strutsの構成要素
• Action、ActionForm
• JSP+タグライブラリ(jstl、struts-tags)
• commons-validator(入力値の検証)
• Struts-tiles(UIの部品化)
• RequestProcesser
13年9月9日月曜日
Struts→JSF
• Action、ActionForm→managed-bean
• JSP+タグライブラリ→XHTML+タグライブラリ
• commons-validator→JSF Validator+Bean Validator
• Struts-tiles→ui composition
• RequestProcesser→Phase Listener
13年9月9日月曜日
managed-bean
13年9月9日月曜日
managed-bean
• StrutsではActionFormとActionとで分かれていた入力値と処理をJSFでは一つにまとめて記述できるようになった
• Strutsではxmlでしか定義できなかったものがJSFではxml
に加えてアノテーションでも定義できるようになった
13年9月9日月曜日
アノテーションベースのmanaged-beanの例
@Named("someBean")//動かない場合は@ManagedBean
@SessionScopedpublic class SomeBean implements Serializable {
public String execute() { //do something.... }
13年9月9日月曜日
XHTML+タグライブラリ
13年9月9日月曜日
XHTML+タグライブラリ
<h:form> <h:inputText id="id" value="#{someBean.id}" /> <h:commandLink action="#{someBean.execute}" value="button" /> </h:form>
13年9月9日月曜日
XHTML+タグライブラリ
• JSPと違いServletには変換されなくなった
•エラーが発生した時にスタックトレースにXHTMLの行番号がそのまま出るのでエラーを追いやすい
13年9月9日月曜日
JSF Validator + Bean Validator
13年9月9日月曜日
JSF Validator + Bean Validator
•バリデーション定義を画面に直接記載するJSF Validator
•バリデーション定義をプロパティに直接記載するBean
Validator
•定義と実際に使う場所が近くなりました
13年9月9日月曜日
JSF Validator
<h:inputText id="name" value="#{someBean.name}" required="true" requiredMessage= "name is required." validator="#{someBean.valid}" label= "message" >
13年9月9日月曜日
JSF Validator
public void validate(FacesContext context, UIComponent component, Object newValue) { // some error check. if (hasError) { throw new ValidatorException("error message."); } }
13年9月9日月曜日
Bean Validator
@NotNull @Size(min=0, max=8) private String name;
アノテーションベースのエラーチェック
13年9月9日月曜日
ui composition
13年9月9日月曜日
ui composition
•いわゆるテンプレート機能
•特に珍しい機能でもないので省略
13年9月9日月曜日
Phase Listener
13年9月9日月曜日
Phase Listener
• StrutsのRequestProcesserのprocessXXXXという名前で定義されていたメソッドがそれぞれ別のクラスになった
• Phaseそのもののカスタマイズや前後に処理を挟むことが可能
• Strutsに比べて拡張しやすくなった
13年9月9日月曜日
Phase Listener
• PhaseListenerクラスをimplimentsする形で作成
•フレームワーク作成時にしか作らないと思うので省略
13年9月9日月曜日
JSF利用時の注意
13年9月9日月曜日
JSF利用時の注意
• JSF1.X(Java EE5以前)とJSF2.X(Java EE6以降)は別物
• JSF1.Xを使うぐらいだったらStrutsの方がマシ
※個人の感想です
13年9月9日月曜日
補足デザイナーさんとの協業向けの機能
13年9月9日月曜日
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日月曜日
最後に業務系SEからの2つのお願い
13年9月9日月曜日
独自のセッション管理機能は作らないで下さい
•昨今のフレームワークはリッチなユーザーインターフェースを実現するためにセッション機能を多用する
•自前でセッションの永続化をするだけだと万が一の時にフレームワーク部分の復元ができない
•仮に作るならAPサーバーと統合して下さい
13年9月9日月曜日
メモリを大量に積んで下さい
•リッチなUIを実現するために、フレームワークがセッションにデータをたくさん持ちます
•セッションにデータを持つのは業務情報だけじゃない
• Struts時代の2倍から10倍ぐらい積むのがオススメ
13年9月9日月曜日
以上
13年9月9日月曜日
とみせかけておまけ
13年9月9日月曜日
13年9月9日月曜日
Strutsじゃないネタが必要?
13年9月9日月曜日
Scalaか!
13年9月9日月曜日
JSFをScalaで
13年9月9日月曜日
去年のネタJava EE 6 With Scala
http://d.hatena.ne.jp/megascus/20121118/1353234678
13年9月9日月曜日
ふつーに動きます(面白みがないぐらい)
13年9月9日月曜日
感想
13年9月9日月曜日
便利です。
13年9月9日月曜日
良い感想は次の方々が説明してくれると思うので
13年9月9日月曜日
悪い感想
13年9月9日月曜日
ScalaからJavaを使う
• Scala自体が互換性を気にしていないため、バージョンアップで動かなくなることが多い
ScalaとJavaでList(Collection)のClassの互換性が無いため、ScalaからJavaのライブラリを扱うのはそれなりに工数がかかる
13年9月9日月曜日
そんな感じで
13年9月9日月曜日
ありがとうございました
Groovyのこと忘れないで下さい
13年9月9日月曜日