本章では、パラメータの受け渡し方法について解説します。
例えば図9.1[パラメータの受け渡し]のように、画面1のテキストフィールドに入力したパラメータを、画面2で表示する処理を実現します。
JavaBeansは、「プロパティ」と呼ばれるものをもつJavaクラスです。あるBeanが持つ「属性」を「プロパティ」と考えることができます。例えば、「1冊の本」を示すBeanでは、次のようなプロパティが存在するでしょう。
Javaのクラスでは、クラスの属性は、クラス中のフィールドで表現されると考えられます。ところが、あるBeanが持つプロパティは、クラスのフィールドとは関係ありません。ある特定のネーミング・ルールに従ったメソッドの存在が、そのBeanのプロパティを決めているのです。
JavaBeansのネーミング・ルールでは、あるBeanに次のようなメソッドがあるとき、そのBeanにはtitleというプロパティが存在することになります。
String getTitle(); void setTitle(String title);
getTitleというメソッドは、titleというプロパティの値を獲得するメソッドです。このメソッドを"getter"と言います。また、setTitleというメソッドは、titleというプロパティに値を設定するメソッドです。このメソッドを"setter"と言います。
setter、getterとプロパティのネーミング・ルールは、次のように整理できます。getterは、"get"で始まる名前を持つメソッドで、setterは、"set"で始まる名前を持つメソッドです。"set","get"の後に続く文字列が、プロパティの名前に対応します。正確には、プロパティ名の先頭の文字を大文字にして、"set"や"get"の文字を加えたものが、setterとgetterになります。
setter名 = "set" + ( プロパティ名 )' getter名 = "get" + ( プロパティ名 )'
逆に言うとプロパティ名は、setter名やgetter名から、先頭の"set"、"get"を取り除いた文字列に対応します。
プロパティ名 = ( setter名から、先頭の"set"を取り除いたもの ) プロパティ名 = ( getter名から、先頭の"get"を取り除いたもの )
整理すると、表9.1[プロパティと setter, getter]のようになります。
| プロパティ名 | title |
| getter名 | getTitle |
| setter名 | setTitle |
HTMLのフォームから入力されたパラメータは、Managed Bean (またはBacking Bean)と呼ばれるJavaBeansに格納されます。このとき、Managed Beanのプロパティでパラメータの情報を管理します。
それでは、Managed Beanのソースを見てみましょう。
public class ParameterBean {
private String word = "";
public void setWord(String word) {
this.word = word;
}
public String getWord() {
return word;
}
}
setWordやgetWordといったメソッドがあることから、このBeanには、wordというプロパティがあることがわかります。このwordプロパティで、テキストフィールドに入力されたパラメータを管理するのです。
Managed Beanを利用するためには、faces-config.xmlに設定を記述する必要があります。
では、faces-config.xmlを見てみましょう。
<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<managed-bean>
<managed-bean-name>ParameterBean</managed-bean-name>
<managed-bean-class>ParameterBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/page1.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/page2.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
このfaces-config.xmlでは、前章で解説したnavigation-rule要素のほかに、新たにmanaged-bean要素を追加しています。
managed-bean要素に含まれている各要素について解説しましょう。
<managed-bean>
<managed-bean-name>ParameterBean</managed-bean-name>
<managed-bean-class>ParameterBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
managed-bean-class要素では、Managed Beanのクラス名を指定しています。
次に、managed-bean-name要素で、このManaged Beanに"ParameterBean"という名前を付けています。
managed-bean-scope要素では、Managed Beanの生存期間を表しています。この要素には、4通りの内容が入ります。
このfaces-config.xmlでは、"session"になっています。
Managed Beanは、managed-bean-scope要素の設定によって自動的にインスタンスが生成されます。JSPのuseBeanタグを使う必要はないのです。
では、画面1のJSPを見てみましょう。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<link href="style.css" type="text/css" rel="stylesheet" />
<title>JSF: パラメータ受け渡しのテスト</title>
</head>
<body>
<h1>JSF: パラメータ受け渡しのテスト</h1>
<f:view>
<h:form id="searchForm">
<h:inputText id="word" value="#{ParameterBean.word}" />
<h:commandButton id="button1" action="success" value="Go!" />
</h:form>
</f:view>
</body>
</html>
前に解説したように、h:inputTextタグが入力フィールドを表すUIコンポーネントです。このタグに、value属性があり、"#{ParameterBean.word}"という見慣れない記述があります。
h:inputTextタグの#{ParameterBean.word}という記述によって、テキストフィールドに入力された文字列は、ParameterBeanのwordプロパティに格納されます。
こうしたしくみのことを"Value Binding"と言います。
また、"#{……}"という書式を"Value Binding式"と言います。
Value Binding式は、次のようなスタイルになります。
#{ Beanの名前 . プロパティ名 }
"Beanの名前"は、先のmanaged-bean-name要素の内容部分となります。
"プロパティ名"は、入力フィールドのパラメータ情報を格納するManaged Beanのプロパティ名となります。
次に、画面2となるpage2.jspです。このJSPで、画面1で入力されたパラメータの情報を出力しています。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<link href="style.css" type="text/css" rel="stylesheet" />
<title>JSF: パラメータ受け渡しのテスト</title>
</head>
<body>
<h1>JSF: パラメータ受け渡しのテスト</h1>
<f:view>
<h:form id="searchForm">
<h:outputText id="word" value="#{ParameterBean.word}" />
</h:form>
</f:view>
</body>
</html>
ここで、h:outputTextタグが出てきます。
<h:outputText id="word" value="#{ParameterBean.word}" />
このh:outputTextタグは、value属性の値を表示するUIコンポーネントです。他のUIコンポーネントと同じく、id属性があります。
また、h:inputTextタグと同様に、value属性があります。ここでは、Value Bindingによって、ParameterBeanのwordプロパティの値が出力されます。