SlideShare a Scribd company logo
1 of 70
Download to read offline
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
• トルコのPrimeTechnology社が開発している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→JSFValidator+BeanValidator
• 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
@SessionScoped
public 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日月曜日
JSFValidator + BeanValidator
13年9月9日月曜日
JSFValidator + BeanValidator
• バリデーション定義を画面に直接記載するJSFValidator
• バリデーション定義をプロパティに直接記載するBean
Validator
• 定義と実際に使う場所が近くなりました
13年9月9日月曜日
JSFValidator
<h:inputText id="name" value="#{someBean.name}"
required="true"
requiredMessage= "name is required."
validator="#{someBean.valid}"
label= "message" >
13年9月9日月曜日
JSFValidator
public void validate(FacesContext context,
UIComponent component,
Object newValue) {
// some error check.
if (hasError) {
throw new ValidatorException("error message.");
}
}
13年9月9日月曜日
BeanValidator
@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日月曜日

More Related Content

What's hot

ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
Taku Miyakawa
 
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門
Satoshi Kubo
 

What's hot (20)

Helidon 概要
Helidon 概要Helidon 概要
Helidon 概要
 
Xamarin.forms navigation overview
Xamarin.forms navigation overviewXamarin.forms navigation overview
Xamarin.forms navigation overview
 
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
 
困らない程度のJDK入門
困らない程度のJDK入門困らない程度のJDK入門
困らない程度のJDK入門
 
PlaySQLAlchemyORM2017.key
PlaySQLAlchemyORM2017.keyPlaySQLAlchemyORM2017.key
PlaySQLAlchemyORM2017.key
 
Jakarta CDI 4.0
Jakarta CDI 4.0Jakarta CDI 4.0
Jakarta CDI 4.0
 
今さら聞けないDiとspring
今さら聞けないDiとspring今さら聞けないDiとspring
今さら聞けないDiとspring
 
MySQLアンチパターン
MySQLアンチパターンMySQLアンチパターン
MySQLアンチパターン
 
ちょっと使えるようになる信頼度成長曲線(移行済)
ちょっと使えるようになる信頼度成長曲線(移行済)ちょっと使えるようになる信頼度成長曲線(移行済)
ちょっと使えるようになる信頼度成長曲線(移行済)
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
 
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
 
MySQLと正規形のはなし
MySQLと正規形のはなしMySQLと正規形のはなし
MySQLと正規形のはなし
 
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
 
今さらWPF? いいえ、今こそWPF!
今さらWPF?いいえ、今こそWPF!今さらWPF?いいえ、今こそWPF!
今さらWPF? いいえ、今こそWPF!
 
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
 
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門
 
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 
インターネットにおける悪評 - 高野光弘編
インターネットにおける悪評 - 高野光弘編インターネットにおける悪評 - 高野光弘編
インターネットにおける悪評 - 高野光弘編
 
OSS についてあれこれ
OSS についてあれこれOSS についてあれこれ
OSS についてあれこれ
 

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

Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lt
torutk
 
How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~
Ryunosuke SATO
 
JSFとJAX-RSで作る Thin Server Architecture #glassfishjp
JSFとJAX-RSで作る Thin Server Architecture #glassfishjpJSFとJAX-RSで作る Thin Server Architecture #glassfishjp
JSFとJAX-RSで作る Thin Server Architecture #glassfishjp
Toshiaki Maki
 
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
tatsuo sakurai
 

Similar to Strutsから移行する人のためのjsf基礎 (10)

GroovyでJSON2015
GroovyでJSON2015GroovyでJSON2015
GroovyでJSON2015
 
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
 
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lt
 
How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~
 
Groovyスクリプト"再"入門 起動編
Groovyスクリプト"再"入門 起動編Groovyスクリプト"再"入門 起動編
Groovyスクリプト"再"入門 起動編
 
JsonSlurperの話
JsonSlurperの話JsonSlurperの話
JsonSlurperの話
 
JSFとJAX-RSで作る Thin Server Architecture #glassfishjp
JSFとJAX-RSで作る Thin Server Architecture #glassfishjpJSFとJAX-RSで作る Thin Server Architecture #glassfishjp
JSFとJAX-RSで作る Thin Server Architecture #glassfishjp
 
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
 
今から始めるApache Groovy
今から始めるApache Groovy今から始めるApache Groovy
今から始めるApache Groovy
 
JavaScriptのテストコード 一緒に勉強しませんか??
JavaScriptのテストコード 一緒に勉強しませんか??JavaScriptのテストコード 一緒に勉強しませんか??
JavaScriptのテストコード 一緒に勉強しませんか??
 

More from Satoshi Kubo

テストって何がしたいんですか?
テストって何がしたいんですか?テストって何がしたいんですか?
テストって何がしたいんですか?
Satoshi Kubo
 
泥沼の中のパフォーマンスチューニング #JJUG
泥沼の中のパフォーマンスチューニング #JJUG泥沼の中のパフォーマンスチューニング #JJUG
泥沼の中のパフォーマンスチューニング #JJUG
Satoshi Kubo
 
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたGlass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみた
Satoshi Kubo
 
金魚本に載ってないJpqlの話 #glassfishjp
金魚本に載ってないJpqlの話 #glassfishjp金魚本に載ってないJpqlの話 #glassfishjp
金魚本に載ってないJpqlの話 #glassfishjp
Satoshi Kubo
 

More from Satoshi Kubo (13)

Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations
Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations
Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations
 
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
 
今のJava
今のJava今のJava
今のJava
 
できる!Pmdカスタマイズ
できる!Pmdカスタマイズできる!Pmdカスタマイズ
できる!Pmdカスタマイズ
 
Javaの速度比較
Javaの速度比較Javaの速度比較
Javaの速度比較
 
Java EEの話(仮)
Java EEの話(仮)Java EEの話(仮)
Java EEの話(仮)
 
テストって何がしたいんですか?
テストって何がしたいんですか?テストって何がしたいんですか?
テストって何がしたいんですか?
 
泥沼の中のパフォーマンスチューニング #JJUG
泥沼の中のパフォーマンスチューニング #JJUG泥沼の中のパフォーマンスチューニング #JJUG
泥沼の中のパフォーマンスチューニング #JJUG
 
Advent calendarを作ってみた
Advent calendarを作ってみたAdvent calendarを作ってみた
Advent calendarを作ってみた
 
Java ee6 with scala
Java ee6 with scalaJava ee6 with scala
Java ee6 with scala
 
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたGlass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみた
 
金魚本に載ってないJpqlの話 #glassfishjp
金魚本に載ってないJpqlの話 #glassfishjp金魚本に載ってないJpqlの話 #glassfishjp
金魚本に載ってないJpqlの話 #glassfishjp
 
JavaEE6 First Application #glassfishjp
JavaEE6 First Application #glassfishjpJavaEE6 First Application #glassfishjp
JavaEE6 First Application #glassfishjp
 

Recently uploaded

Recently uploaded (12)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

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