Powered by SmartDoc

パラメータの受け渡し

「パラメータの受け渡し」とは何か

本章では、パラメータの受け渡し方法について解説します。

例えば図6.1[パラメータの受け渡し]のように、画面1のテキストフィールドに入力したパラメータを、画面2で表示する処理を実現します。

パラメータの受け渡し

JavaBeansとプロパティ

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"を取り除いたもの )

整理すると、表6.1[プロパティと setter, getter]のようになります。

プロパティと setter, getter
プロパティ名 title
getter名 getTitle
setter名 setTitle

Managed Bean の作成

HTMLのフォームから入力されたパラメータは、Managed Bean (またはBacking Bean)と呼ばれるJavaBeansに格納されます。このとき、Managed Beanのプロパティでパラメータの情報を管理します。

それでは、Managed Beanのソースを見てみましょう。

ParameterBean.java
public class ParameterBean {

    private String word = "";

    public void setWord(String word) {
        this.word = word;
    }

    public String getWord() {
        return word;
    }
}

setWordやgetWordといったメソッドがあることから、このBeanには、wordというプロパティがあることがわかります。このwordプロパティで、テキストフィールドに入力されたパラメータを管理するのです。

faces-config.xml の設定

Managed Beanを利用するためには、faces-config.xmlに設定を記述する必要があります。

では、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通りの内容が入ります。

application
そのWebアプリケーションが起動してから終了するまで
session
セッションが有効なあいだ
request
(HTTPの)要求から応答まで
none
スコープには属さない

このfaces-config.xmlでは、"session"になっています。

Managed Beanは、managed-bean-scope要素の設定によって自動的にインスタンスが生成されます。JSPのuseBeanタグを使う必要はないのです。

JSP と Value Binding

Value Binding

では、画面1のJSPを見てみましょう。

page1.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 式

Value Binding式は、次のようなスタイルになります。

#{ Beanの名前 . プロパティ名 }

"Beanの名前"は、先のmanaged-bean-name要素の内容部分となります。

"プロパティ名"は、入力フィールドのパラメータ情報を格納するManaged Beanのプロパティ名となります。

h:outputText タグ

次に、画面2となるpage2.jspです。このJSPで、画面1で入力されたパラメータの情報を出力しています。

page2.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: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プロパティの値が出力されます。