Section10 JavaBeanコンポーネントを使用したJSPのデザインと開発

下記のタグ機能で、属性と値で同じように正確に作成された タグをタグの機能性の対応する説明と合致させる

<jsp:useBean> ビーンの使用を宣言します。

書式
<jsp:useBean id="beanInstanceName"
  scope="page|request|session|application"
  {
    class="package.class" [ type="package.class" ] |
    beanName="{package.class | <%= expression %>}" type="package.class" |
    type="package.class"
  }
{ /> | > other elements
</jsp:useBean> }
説明
属性名 説明
id このオブジェクトの識別子。
この属性は必須です。
scope オブジェクトの有効範囲を指定します。
page、request、session、applicationのいづれかを指定します。
指定しない場合はpageになります。
class オブジェクトの完全修飾クラス名を指定します。
beanName ビーンの名前を指定します。
(.serなどを指定するようです)
type オブジェクトの型を指定します。
指定しない場合はclassと同じになります。




一般的な使い方としては、こんな感じでしょうか。
<jsp:useBean id="hoge" class="pkg.Hoge" scope="request"/>
requestのスコープから、hogeという名前のオブジェクトを検索し、 検索したオブジェクトをpkg.Hogeクラスとして利用します。
このjsp:useBeanアクションをjavaコードに置き換えると、 以下のようなコードになると思います。
pkg.Hoge hoge = (pkg.Hoge)request.getAttribute("hoge");


typeを指定することで、インスタンスのクラスではなく、インターフェイスなどで 受けることも可能です。
<jsp:useBean id="hoge" type="java.util.List" scope="request"/>
Javaコードで考えるとこんな感じになるでしょう。
java.util.List hoge = (java.util.List)request.getAttribute("hoge");


また、 スコープからgetAttributeでidのオブジェクトが見つからなかった場合は、 新たにクラスが生成されます(class属性かbeanName属性が指定されている場合)。


<jsp:setProperty> ビーンに値をセットします。

書式
<jsp:setProperty name="beanInstanceName"
  { property="*" |
    property="propertyName" [ param="parameterName" ] |
    property="propertyName" value="{string | <%= expression %>}" 
  }
/>
説明
属性 説明
name オブジェクトの名前
property 設定するプロパティーの名前
param リクエストからプロパティーを設定するときのパラメータ名
value 設定するプロパティーの値




jsp:setPropertyアクションを使うことで、 ServletRequestパラメータの値を簡単にビーンにセットすることができます。
<jsp:setProperty name="hoge" property="age">
HTMLリクエストから渡された、age=25の値をhogeという名前のビーンにセットします。
Javaコードで考えるとこうなります。
hoge.setAge(request.getParameter("age"));
//getAttribute()でなくgetParameterです。
//キャストとか略
パラメータがたくさんあって、イチイチsetPropertyするのが手間なときは、 propety属性にワイルドカード("*")を指定することで、 hogeビーンに存在するセッタメソッドを使って、 request.getParameterで取得できたオブジェクトをすべてセットできます。



リクエストからではなく、別の値をセットする場合はvalue属性を使います。
<jsp:setProperty name="hoge" property="age" value="25" />
hogeオブジェクトのageプロパティーに"25"をセットします。 Javaコードで考えるとこうなります。
hoge.setAge("25");



<jsp:getProperty> ビーンから値を取得します。

書式
<jsp:getProperty name="beanInstanceName" property="propertyName" />
年齢 <jsp:getProperty name="hoge" property="age"> 



JavaBeansとプロパティーについて

例えば、名前と年齢をフィールドにもつPersonクラスというのを考えてみましょう。
public class Person{
  String m_name;
  int m_age;

  public int getAge(){
    return age;
  }
  public void setAge(int age){
    m_age = age;
  }
  public String getName(){
    return name;
  }
  public void setName(String name){
    m_name = name;
  }
}
このとき、このPersonビーンのプロパティーは、
name
age
になります。

JSPコンテナは、フィールド名ではなく、セッタ、ゲッタのメソッド名から プロパティーを探します。
このビーンのプロパティーに対して、以下のような操作を行うわけです。
<jsp:useBean id="person" class="pkg.Person" />
<jsp:setAttribute name="person" param="age" value="20">
<jsp:getAttribute name="person" param="age">