TOPシステム開発> JSF設定ファイルへの登録
まるごとサーバサイドJava
JDeveloperで学ぶJSF入門

第16回:カスタムコンポーネントの作成(後編)

著者:WINGSプロジェクト  佐藤治夫(株式会社ビープラウド)、
小泉守義

監修:山田祥寛   2006/9/13
前のページ  1  2  3
JSF設定ファイルへの登録

   次に、作成したカスタムコンポーネント/レンダラをJSF設定ファイル(faces-config.xml)に登録します(リスト3)。
リスト3:faces-config.xml(抜粋)
<!-- コンポーネント-->
<component>
   <component-type>to.wings.msn.jsf.custom.UIInputDate</component-type>
   <component-class>to.msn.wings.jsf.custom.component.date.UIInputDate</component-class>
</component>

<!-- レンダラ-->
<render-kit>
   <renderer>
      <component-family>to.msn.wings.jsf.custom.input</component-family>
      <renderer-type>to.wings.msn.jsf.custom.InputDateRenderer</renderer-type>
      <renderer-class>to.msn.wings.jsf.custom.component.date.InputDateRenderer</renderer-class>
   </renderer>
</render-kit>

   <component-type>要素、<renderer-type>要素内には、カスタムタグクラス(InputDateTag.java)のgetComponentType()メソッドとgetRendererType()メソッドが返す値と同じものをそれぞれに設定しておく必要があります。これにより、カスタムタグクラス、レンダラ、コンポーネントの関連付けをJSFが認識します(図3を参照)。

カスタムコンポーネントの仕組み(再掲)
図3:カスタムコンポーネントの仕組み(再掲)


マネージドBean

   日付入力コンポーネントで入力した値をバインディングするマネージドBeanをリスト4に示します。このクラスは、属性としてjava.util.Calendarを持ち、そのセッター/ゲッターメソッドを定義しています。

リスト4:DateHolder.java(抜粋)
public class DateHolder {

   private Calendar date = null;


   public Calendar getDate() {
      return date;
   }

   public void setDate(Calendar date) {
      this.date = date;
   }

   このマネージドBeanのJSF設定ファイルへの登録方法をリスト5に示します。このBeanは、JSFコンポーネントタグから#{dateBean.date}というバインディング式で参照されます。

リスト5:faces-config.xml(抜粋)
<managed-bean>
   <managed-bean-name>dateBean</managed-bean-name>
   <managed-bean-class>to.msn.wings.jsf.bean.DateHolder</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
</managed-bean>


JSPページへのコンポーネントの配置

   JSPページ(input.jsp)にカスタムコンポーネントを配置します(リスト6)。画面で入力された値が正しい日付の場合、次の画面に(result.jsp)遷移し、入力した日付の文字列を表示します(リスト7)。

リスト6:input.jsp
<f:view>
<h:form>
   <h:panelGrid>
      <wings:inputDate id="birthday" value="#{dateBean.date}"/>
      <h:message for="birthday"/>
      <h:commandButton value="Submit" action="success"/>
   </h:panelGrid>
</h:form>

リスト7:result.jsp
<f:view>
<h:outputText value="#{dateBean.date.time}">
<f:convertDateTime dateStyle="default"/>
</h:outputText>
</f:view>


まとめ

   本稿では、次世代のWebアプリケーションフレームワークであるJSFの基本を紹介しました。1990年代にCGIから始まったWebアプリケーションの開発も、サーバサイドJavaの登場、そして数々のツール、フレームワークが登場し、現在に至っています。

   それらの試行錯誤の中で培われたWebアプリケーション開発のノウハウの集大成がJSFであると言えるでしょう。JSFのようにフレームワークが仕様化されることにより、実装が変わっても、開発者は新たな知識を一から学ぶ必要がなくなり、さらに開発効率が上がることが予想できます。

   現在のJava Webアプリケーションで使用されるフレームワークのデファクトスタンダードはStrutsですが、JSFはStrutsの良いところをベースとして開発され、さらに開発を容易にする仕様となっています。本稿によりJSFに触れ、その魅力の一端をご理解いただけたら幸いです。

前のページ  1  2  3


著者:WINGSプロジェクト 佐藤治夫(株式会社ビープラウド)、小泉守義 監修:山田祥寛
著者プロフィール
著者:WINGSプロジェクト 佐藤治夫(株式会社ビープラウド)、
小泉守義
監修:山田祥寛

WINGSプロジェクトは、有限会社WINGSプロジェクト(代表取締役山田祥寛)が運営するライティング・チーム。海外記事の翻訳から、主にサーバサイド分野の書籍/雑誌/Web記事の執筆、講演、アプリケーション開発などを幅広く手がける。2006年7月時点での登録メンバーは20名で、現在も一緒に執筆をできる有志を募集中。執筆に興味のある方は、どしどし応募いただきたい。


INDEX
第16回:カスタムコンポーネントの作成(後編)
  レンダラクラスを作成
  UIコンポーネントクラスを作成
JSF設定ファイルへの登録