→Java関連

→JBoss Seam関連

→[[JSP関連]]

#contents


*概要 [#q19dc5fa]
-JSFはWebアプリケーションのインターフェイスを構築するためのフレームワーク

-JSFはMVCにおけるVとCの機能を提供する
--View→JSFのタグライブラリで拡張されたJSPを用いてWebインターフェイスを記述
--Control→Managed Beanと設定ファイルによってコントローラを実装
--Model→EJB
---Entityはデータモデル
---SessionBeanはイベントリスナー

--JSFでは画面から受け取ったアクションをfaces-config.xmlで指定されたManaged Bean(=Backing Beanとも言う?)によって処理する
--ビジネスロジックの実装にEJB3を使用する場合、Managed BeanからEJB3コンポーネントをルックアップ、データの受け渡しが必要
--JavaEE5ではJSFとEJBをつなぐ標準の方法が用意されていない
--そこでJBoss Seamが登場し、両者を統合、管理してシームレスにつなぐことを可能とした
--JBoss SeamではManaged Beanの設定を外部ファイルでなくソース内のアノテーションで行う
--Seamコンポーネントを自動的に適切なManaged Beanにマッピング
--「JSF (JavaServer Faces)」は、ユーザによりブラウザ等で表示されるページ(UI)とJavaBeans(ビジネスロジック)の間のやり取りをプログラムレスにし、簡単にWebアプリケーションを開発することを可能とするフレームワークです。
--Strutsは画面遷移(MVCモデルのC)に強いのに対して、JSFはユーザインタフェース(MVCモデルの V)に強い

-JSFの特徴
--Webアプリケーションのフォームを簡単に開発可能
--UIとデータのやり取りを簡単に実現
--UIコンポーネントに入力されたデータの型変換、妥当性チェックを標準でサポート
--ページ間の画面遷移をXMLで一括管理可能(Strutsと同様)
--UIコンポーネントとビジネスロジックを分離開発可能


*関連Web [#m7abc452]
-http://java.sun.com/javaee/javaserverfaces/

-[[JamesHolmes.com Java Server Faces Resources >http://www.jamesholmes.com/JavaServerFaces/]]

-http://www.jsfcentral.com/

-[[Oracle ADF:http://www.oracle.com/technology/products/adf/adffaces/index.html]]
--Oracle ADF Faces is a rich set of user interface components based on the JavaServer Faces JSR (JSR-127). The Oracle ADF Faces Components provide various user-interface components with built-in functionality - such as data tables, hierarchical tables, and color and date pickers - that can be customized and re-used in your application. 

-[[Faces Console>http://www.jamesholmes.com/JavaServerFaces/console/]]
--The Faces Console is a FREE standalone Java Swing application for developing and managing JavaServer Faces-based applications. With the Faces Console you can visually edit JavaServer Faces configuration files as well as JSP Tag Library files.
--The Faces Console also plugs into multiple, popular Java IDEs for seamless management of JavaServer Faces applications from one central development tool.


*解説記事 [#efcc8cb4]
-[[JSF MyFacesを使ってみる>http://muimi.com/j/jsf/myfaces/]]
--MyFacesはオープンソースのJSF実装です
--http://www.myfaces.org/

-[[JSF入門>http://dream.mods.jp/first_jsf/part1.html]]

-[[JSFがくる>http://muimi.com/j/jsf/]]

-[[JSFによるWebアプリケーション開発>http://www.wakhok.ac.jp/~tomoharu/jsf2004/text/index_c6.html]]
--Managed Bean = Backing Bean 
--Managed Beanとは、アプリケーションのWeb層とビジネス層の間のデータ管理に使用されるJavaBeans、らしい

-[[JSFの構造を探る:http://www.atmarkit.co.jp/fjava/special/jsf01/jsf01.html]]
--コンポーネントタグライブラリ(UIのJSPカスタムタグライブラリ)
--コアタグライブラリ(イベントハンドラ、バリデータ、コンバータのJSPカスタムタグライブラリ)
--サーバサイドでステートフルオブジェクトとして表現されるUI
--イベントハンドラ、バリデータ、コンバータ
--JavaBean(データモデル=モデルオブジェクト)
--サーバサイドヘルパークラス
--JSFページ

-[[JavaServer Facesを理解する>http://www.atmarkit.co.jp/fjava/special/jsf01/jsf01.html]]
--[[(後編)>http://www.atmarkit.co.jp/fjava/special/jsf02/jsf02_04.html]]

-[[JSF紹介>http://www.iplatform.org/develop/jsf/jsf.htm]]


*タグライブラリ [#a58bec60]
-JSFのタグライブラリはHTMLタグとcoreタグに別れる

-HTMLタグ
--HTML生成を行う
--ネームスペース <h:〜 で表される

-coreタグ
--HTMLと直接関連しないユーティリティを提供?
--ネームスペース <f:〜 で表される

**自前Converterタグライブラリを作る例 [#s04dade5]
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.GregorianCalendar;
 import java.util.Locale;
 
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.Converter;
 
 public class MyFormatConverter implements Converter {
 	public Object getAsObject(FacesContext context, UIComponent component, String value) {
 		// valueをコンバートしたObjectを返す
 	}
 	
 	public String getAsString(FacesContext context, UIComponent component, Object value) {
 		// valueをコンバートした Stringを返す
 	}
 	
 }
-使用例
 <h:outputText 
 	value="#{hogeCompo.hogeValue}"
 	converter="myFormatConverter" />



*Facelets [#de5991af]
-[[Facelets Developer Documentation>https://facelets.dev.java.net/nonav/docs/dev/docbook.html]]
-[[Faceletsとは>http://journal.mycom.co.jp/special/2006/seam/007.html]]
--FaceletsはJSFアプリケーションを作成するためのフレームワークである。
--Faceletsを使用することで、JSFのビューに対してテンプレートを適用できるようになるほか、HTMLタグをJSFコンポーネントのように利用できるなど、いくつかの強力な機能を使用できるようになる。
--JSPコンテナに依存しない
--ネームスペース <ui:〜 で表される

**ui:compositionのtemplate属性の使い方 [#gc578455]
-ページの全体デザインのテンプレートみたいなページを用意し、そこにページの中身を差し込むことが可能。
-ui:composition のtemplate属性にその(テンプレートとなる)xhtmlのパスを指定
-以下のようになることが多い
 <ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:s="http://jboss.com/products/seam/taglib"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:a="https://ajax4jsf.dev.java.net/ajax"
	xmlns:rich="http://richfaces.ajax4jsf.org/rich"
	template="/layout/template.xhtml">
-/layout/template.xhtml側では、適当にページをデザインした後、中身を差し込みたい場所に
 <ui:insert name="body"/>
 などと書いておく。nameの値は任意。
-テンプレートを呼び出す側のページにはui:insertの場所に差し込む内容として、ui:define で name="body"としたブロックを用意する。
 <ui:define name="body">
 (〜適当に差し込みたい中身)
 </ui:define>
-ここでui:insertに指定したnameと同じnameでui:defineすることがポイント。
-名前が違うとスルーされてテンプレートの中に何も表示されない(中身なしのページになる)ので注意

-つまり、テンプレートを適用される側のページは、
 <ui:composition ... 
 template="/layout/template.xhtml">
   <ui:define name="body">
    ... 
 (〜適当に差し込みたい中身)
    ... 
   </ui:define>
 </ui:composition>
と言う感じになる。
-参考になるページ:http://otjwave.itbdns.com/~okamura/SeamProjects/Project02/SeamProject02-01.html


*faces-config.xml [#ld811e31]
-jsfのメイン設定ファイル
-WEB-INF直下におかれる
-以下のようなものを設定する
--Managed Bean定義
--ナビゲーション=画面遷移
--ロケール


*Tips [#scbb8086]
-JSFのBeanメソッドへのリンクにGETパラメータを付ける
 <s:link action="#{hogeBean.hoge()}" value="hoge">
 	<f:param name="hogeParam" value="xxx" />
 </s:link>

-すべてのJSFツリーの起点には<f:view>タグが必要


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS