<jsp:useBean>
SYNOPSIS
| id*="変数名" |
| scope="page|request|session|application" |
| class†1="クラス完全限定名" |
| beanName†1="Bean名|クラス完全限定名" |
| type†1="クラス完全限定名" |
| 新規に Bean が生成されたときに実行される内容. |
説 明
id 属性で指定した変数をスクリプトレット内で使用できるようにします。
この時、変数に対する Bean が存在しない場合は新たに生成してスコープに
設定します (これは EL から参照できます)。
新規にインスタンスが構築された場合、このタグの中に記述された処理が
実行されます。
class、beanName、type 属性の組み合わせは 4 通り
存在し、それぞれ微妙に違いますので注意してください。
class 属性を単体で指定した場合、スコープ内に id に
対応する Bean が存在しなければこのクラス名に基づいたインスタンスが
新たに生成されます。
<jsp:useBean id="foo" class="MyBean" /> ↓ MyBean foo = (MyBean)pageContext.findAttribute("foo"); if(foo == null){ foo = (MyBean)Class.forName("MyBean").newInstance(); pageContext.setAttribute("foo", PageContext.SCOPE_PAGE); }
class 属性に type 属性を併用した場合は、ローカル変数の
型を限定することができます。
<jsp:useBean id="foo" type="MyBean" class="MyBeanImpl" /> ↓ MyBean foo = (MyBean)pageContext.findAttribute("foo"); if(foo == null){ foo = (MyBean)Class.forName("MyBeanImpl").newInstance(); pageContext.setAttribute("foo", PageContext.SCOPE_PAGE); }
beanName 属性を指定した時は Beans.instantiate()
メソッドを用いてインスタンスが生成されます。この時 type
属性は必須です。
<jsp:useBean id="foo" type="MyBean" beanName="myBean" /> ↓ MyBean foo = (MyBean)pageContext.findAttribute("foo"); if(foo == null){ foo = (MyBean)Beans.instantiate(classLoader, "myBean"); pageContext.setAttribute("foo", PageContext.SCOPE_PAGE); }
type 属性のみを指定した場合はスコープ内に Bean が存在
しなければ例外となります。
<jsp:useBean id="foo" type="MyBean" />
↓
MyBean foo = (MyBean)pageContext.findAttribute("foo");
if(foo == null){
throw new JspException(message);
}
属 性
新しく作成した Bean を格納するスコープ。
page スコープはこのページ内の処理でのみ有効な最も狭い
スコープを持ちます。
<jsp:forward>, <jsp:include> などによる
呼び出しの連鎖で、別の JSP で同一 id の Bean が定義されて
いたとしても、Bean のインスタンスはそれぞれの JSP で保持されるので
互いに影響を及ぼしません。
また複数のリクエストが同一の JSP を同時に実行していても Bean の
インスタンスはそれぞれの処理で個々に生成されるため影響はありません。
request, session, application スコープはそれぞれ
ServletRequest, HttpSession, ServletContext
属性のスコープと等価です。
実際にインスタンス化するクラス名です。
指定されたスコープ内に id に該当する Bean が存在しない場合、
このクラスのインスタンスが新規に生成されます。このクラスはデフォルト
コンストラクタによって生成可能でなければいけません。
type 属性と合わせる事で、スクリプトレット内でこの Bean に
アクセスするインターフェースを選択できます。
インスタンス化する Bean の名前です。スコープ内に id に該当する
Bean が存在しない場合、
Beans.instantiate
を用いて新しいインスタンスが生成されます。
()
beanName 属性を指定した場合は type 属性が必須です。
また class 属性と併用することはできません。
内 容
使用例
<jsp:useBean id="date" class="java.util.Date"> <jsp:setProperty name="date" property="hours" value="0" /> <jsp:setProperty name="date" property="minutes" value="0" /> <jsp:setProperty name="date" property="seconds" value="0" /> </jsp:useBean> <%= DateFormat.getDateTimeInstance().format(date) %>
<jsp:useBean id="auth" class="biz.moyo.lab.auth.LoginBean">
<jsp:setProperty name="auth" property="username" param="user" />
<jsp:setProperty name="auth" property="password" param="pass" />
<% if(! auth.execute()){ %>
<jsp:forward page="login.jsp">
<jsp:param name="message" value="<%= auth.getMessage() %>" />
</jsp:forward>
<% } %>
<jsp:useBean id="user" class="biz.moyo.lab.auth.UserBean" scope="session">
<jsp:setProperty name="user" property="username" param="user" />
</jsp:useBean>
</jsp:useBean>
<jsp:getProperty name="auth" property="message" />
id にユーザ情報が格納されていない場合は例外となります。
<jsp:useBean id="user" type="biz.moyo.lab.auth.UserBean" scope="session" /> USERNAME: <jsp:getProperty name="user" property="username" />
app のインスタンスはコンテナ起動時にサーブレットやリスナにより設定済みという前提の JSP です。
該当する id にアプリケーションが格納されていない場合は例外となります。
<jsp:useBean id="app" type="biz.moyo.lab.foo.MyApplication" scope="application" />
<% if(! app.available()){
response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
return;
} %>
form インスタンスは forward 先の JSP からも参照できますので、呼び出し先の prev-page.jsp 側で今回の入力値をそのままデフォルト値として使う事が出来ます。
<jsp:useBean id="form" class="biz.moyo.lab.page.Form" scope="request" />
<jsp:setProperty name="form" property="*" />
<% if(form.check()){ %>
<jsp:forward page="prev-page.jsp" />
<% } %>
<jsp:useBean id="form" class="biz.moyo.lab.page.Form" scope="request" />
MESSAGE: <jsp:getProperty name="form" property="message" /><br>
USERNAME: <input type="text" name="username"
value="<jsp:getProperty name="form" property="username" />"><br>
PASSWORD: <input type="password" name="password"><br>