管理Beanを使ってみる
前回のサンプルは、JSPの表示だけを使ったものでした。JSFでは、もう1つ「管理Bean」も重要な役割を果たします。今度は、管理Beanを使ってみることにしましょう。
管理Beanは、大まかにいってしまえば2つの要素からなります。1つは「JSPで利用するさまざまな要素を管理するためのもの」、もう1つは「JSPから呼び出される処理」です。
JSPで利用する要素の管理というのは、JSPに記述したタグを管理するためのフィールドとアクセサです。JSPでは、JSF用のタグを使ってさまざまな要素を記述し表示することができます。ボタンや入力フィールド、表示テキストなどといったものですね。これらを管理Beanで管理するために、JSFには専用のクラスが用意されています。これをフィールドとして用意しておくことで、管理Bean側でJSPに表示される要素を管理できるのです。
例えば、JSPに入力フィールドのタグを書き、これを管理Beanで操作したいと思ったら、管理Beanクラスに入力フィールド用を管理するためのクラスをフィールドとして用意します。そしてそのアクセサ(Setter/Getterメソッド)を用意し、そこで値を取り出したり変更したりするための処理を用意しておきます。そして、両者の間の「バインディング」と呼ばれる手法で結び付けます。
まぁ、これは実際にやってみないとわかりにくいでしょう。簡単なサンプルを作ってみることにしましょう。まず、JSPの表示を少し修正しましょう。
<?xml version="1.0" encoding="utf-8" ?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html" version="1.2">
<jsp:directive.page language="java"
contentType="text/html; charset=utf-8" pageEncoding="utf-8" />
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JSF Sample</title>
</head>
<body>
<f:view>
<h:outputText value="JSF Sample" id="text0"
style="color: #0000AA; font-size: 18px; font-weight: bold" />
<br /><br />
<h:outputText value="これは、JSFによる表示です。" id="text1"
binding="#{page1Bean.text1}"/>
<h:form>
<h:inputText value="" id="field1" binding="#{page1Bean.field1}" />
<h:commandButton value="送信" id="button1"
action="#{page1Bean.button1_action}" />
</h:form>
</f:view>
</body>
</html>
</jsp:root>
ここでは、<f:view>の中に、<h:form>というタグが用意されていますね。これは、フォームを記述するためのものです。HTMLでさまざまな情報を送信するとき、使われます。HTMLのフォームでは、actionやmethodなどを細かく指定しなければいけませんが、JSFでは、ただ<h:form>タグを書くだけです。
この中では、<h:inputText>というタグと、<h:commandButton>というタグが追加されていますね。これらは、それぞれ<h:input type="text">と<h:input type="submit">に相当するものです。
それぞれのタグの中には、id、valueというものがあります。idは識別のためのID名、そしてvalueは表示される値を示します。重要なのは、その後にある「binding」と、<h:commandButton>にある「action」です。
「binding」は、そのタグに関連付けられているBeanクラスのフィールドを示します。これは、"#{管理Bean名.フィールド}"といった形で記述をします。ここでは「page1Bean」という管理Beanの「field1」といったフィールドに関連付けがされている、ということになります。
「action」は、ボタンをクリックしたときに実行される処理を示します。これも、実行するメソッドを関連付けてやります。ここでは、"#{page1Bean.button1_action}"という値が設定されていますね? これは、page1BeanというBeanクラスの、button1_actionメソッドを実行する、ということを示します。
この関連付け(バインディング)が、JSFを利用する上での重要なポイントになります。関連付けの書き方を、ここでしっかり覚えておきましょう。