本章では、パラメータの受け渡し方法について解説します。
例えば図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プロパティの値が出力されます。