StrutsとJSFは共存、統合どちらへ(7/8 ページ)

» 2005年01月19日 09時15分 公開
[阿島哲夫(カサレアル),ITmedia]

ビジネスロジックの呼び出し

 JSFでは、BackingBeanにビジネスロジック(またはビジネスロジックを呼び出す処理)を記述する。ビジネスロジックとなるメソッドは、戻り値をjava.lang.String型で実装しなければならない、というルールがある。この文字列は、画面遷移の設定で参照されるフラグのようなものだ。リスト14は、ビジネスロジックとしては何も処理を行わず、単純に"success"という文字列を返すだけの実装例だ。

リスト14■BackingBeanのビジネスメソッド
public String doBizLogic() {
// ここにビジネスロジックを呼び出す処理を記述。
return "success";
}

画面の作成

 JSFには、UIコンポーネントを実装したタグライブラリが標準で用意されており、カスタムタグを使ってUIコンポーネントを配置したJSPページを作成する。リスト15は、実行時の見た目がリスト6とほぼ同一だが、JSFカスタムタグを使って実装されている。h:inputText タグがテキストボックスに相当するUIコンポーネントタグであり、value属性の"#{WelcomeBean.userName}"という設定によって、登録名"WelcomeBean"というBackingBeanのプロパティ"userName"にバインド(関連付け)されている。

 また、h:commandButton タグはsubmitボタンに相当するUIコンポーネントを配置するタグだ。JSFではイベントモデルが採用されており、どのボタンが押下されたらどのような処理を行うのかをaction属性設定で行う。

 この実装例では、ボタンと、登録名"WelcomeBean"というBackingBeanのメソッド"doBizLogic"がバインドされている。

リスト15■入力画面(JSF)
<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ taglib uri="/tags/jsf-html" prefix="h" %>
<%@ taglib uri="/tags/jsf-core" prefix="f" %>
<html>
<head>
<title>JSFのサンプル</title>
</head>
<body>
<f:view>
<h:form id="input">
<center>
<br />
<h3>お名前は?</h3>
<h:inputText id="name" value="#{WelcomeBean.userName}" size="30" />
<br /><br />
<h:commandButton id="button" value=" 送信 " action="#{WelcomeBean.doBizLogic}" />
</center>
</h:form>
</f:view>
</body>
</html>

 リスト16は、ようこそ画面のJSFによる実装例だ。h:outputText タグが画面出力を行うタグであり、value="#{WelcomeBean.userName}" という設定により、WelcomeBean の userName というプロパティにバインドされている。

 JSFではハイパーリンクを生成するタグは h:commandLink になる。またaction属性には "Back" という文字列が設定されているが、これは画面遷移の設定で参照されるフラグとなる。入力画面の h:commandButton のように、BackingBean のメソッドにバインディングすることもできる。

リスト16■ようこそ画面(JSF)
<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ taglib uri="/tags/jsf-html" prefix="h" %>
<%@ taglib uri="/tags/jsf-core" prefix="f" %>
<html>
<head>
<title>ようこそ!JSFの世界へ!</title>
</head>
<body>
<f:view>
<h:form>
<center>
<br />
<h3>ようこそ!<h:outputText value="#{WelcomeBean.userName}" />さん!</h3>
<br /><br />
<h:commandLink id="back_button" action="Back" value="戻る" />
</center>
</h:form>
</f:view>
</body>
</html>

画面遷移の設定

 JSFでは、/WEB-INF/faces-config.xmlの <navigation-rule> 要素で画面遷移の設定を行う。Strutsと違い、JSFでは遷移元の画面ごとに設定を行う(Strutsではリクエストパスごとに設定する)。

 リスト17にある1つ目の設定は、遷移元の画面が/index.jspであり、要求される画面遷移フラグが"success"の場合、"/welcome.jsp"へ遷移する設定例だ。画面遷移フラグの文字列はUIコンポーネントにaction属性で指定された文字列(メソッドがバインドされている場合はメソッドの戻り値)である。2つ目の設定は、遷移元の画面が /welcome.jsp であり、要求される画面遷移フラグが "Back" である場合、/index.jsp へ遷移するよう設定されている。

リスト17■JSFの画面遷移の設定
<navigation-rule>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/welcome.jsp</to-view-id>
</navigation-case>
</navigation-rule>

<navigation-rule>
<from-view-id>/welcome.jsp</from-view-id>
<navigation-case>
<from-outcome>Back</from-outcome>
<to-view-id>/index.jsp</to-view-id>
</navigation-case>
</navigation-rule>

メッセージリソースファイルの作成

 JSFでもエラーメッセージ等はメッセージリソースファイルに記述する。ファイル名とデプロイ場所はfaces-config.xmlの <message-bundle> 要素に指定する。

リスト18■JSF設定ファイル、<message-bundle> の設定例
<application>
<message-bundle>
resources.application
</message-bundle>
</application>

入力値の検証

 JSFでも、Strutsと同様にクライアントからの入力値妥当性検査の仕組みが提供されている。JSFでは、カスタムタグやカスタムタグのオプション設定により、UIコンポーネントに対して入力値検証の設定を行う。JSF標準では、未入力検査、文字列長検査、値の範囲検査(整数型、小数点型)が用意されている。カスタムバリデータと呼ばれる、自作の検証ロジックを実装することも可能だ。リスト19は、テキストボックスに未入力検査と入力可能な文字列長を1文字から64文字と設定した例だ。

リスト19■テキストボックスに未入力検査と文字列長検査の実装例
<h:inputText id="name" value="#{WelcomeBean.userName}" size="30" required="true">
<f:validateLength maximum="64" minimum="1" />
</h:inputText>

画面■未入力の場合の実行例(JSF)

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ