<c:set>
SYNOPSIS
説 明
変数に値を設定します。 ページ内で使用する定数値を JSP の先頭で宣言しておいたり、EL で評価した結果をあちこちで使いまわす場合などに使用します。
このタグには 3 種類の使い方がありますので注意してください。
-
pageContext.setAttribute()で特定のスコープに属性値として値を格納する。 -
Mapの値として設定する。 - Bean のプロパティとして値を設定する。
<c:out> <c:remove> 属 性
変数に値を設定します (変数名は固定であるためここに EL は記述できません)。
これは
pageContext.setAttribute(var,value,scope)
と同じ結果になります。
後続の EL でこの変数名を使用して設定値を参照することが出来ます。
設定する値です。
この属性が省略された場合、タグ内の評価結果が文字列として設定されます。 XML などの長い文字列を設定したい場合はタグ内に記述したほうが読みやすくなります。
値の設定先となるオブジェクトを指定します。この値は EL で記述しなければならないので 注意してください。値が null の場合は例外が発生します。
設定先のインスタンスが Map インターフェースを実装している場合、プロパティ名をキーとして
Map#put(property,value)
が行われます (value が null の場合は Map#remove(property)
となります)。
Map が実装されていない場合は Bean と見なされ、プロパティ名に対する setter が
呼び出されます。
値の設定先のプロパティです。
target のインスタンスが Map の場合はキー名を、
Bean の場合はプロパティ名を意味します。target 属性を指定した場合は必須です。
target が Bean であり、このプロパティ名に対する setter が実装されていない
場合は例外が発生します。
var で指定した変数のスコープです。
page, request, session,
application のいずれかを指定します。
page はこのリクエストのこのページ内の処理でだけ有効な変数を意味し、
include や forward した先では値を参照できません。
request はこのリクエスト全体にわたって有効な変数です。
include や forward 先でも参照できますが、次以降のリクエストでは参照できません。
session はユーザのセッションに渡って有効な変数です。
application は全ユーザ共通して参照できる変数です。
スコープの詳細については
PageContext
を参照してください。
内 容
使用例
<c:out value="${foo}" />
<c:set var="foo" value="hello, world" />
<c:out value="${foo}" />
<% pageContext.setAttribute("foo", "1", PageContext.PAGE_SCOPE); %>
<c:out value="${foo}" />
<c:set var="foo" value="2" />
<c:out value="${foo}" />
<jsp:include> 先で使用するオブジェクトを設定しておきたい場合には
request スコープを使用します。
<c:set var="foo" value="100" scope="request" />
<jsp:forward page="page.jsp" flush="true" />
// page.jsp
<c:out value="${foo}" />
Map に値を格納します。出力結果は 「{bar=2}」 となります。
<% pageContext.setAttribute("foo", new HashMap()); %>
<c:set target="${foo}" property="bar" value="${1+1}" />
<c:out value="${foo}" />
Date が Bean かどうかは疑問ですが標準
API で適切な Bean が思いつかないので例として使用しています)。
Date#setYear(107), Date#setMonth(11) などが
呼び出されて 「2007/12/05 0:00:00 」 という結果になります。
<% pageContext.setAttribute("foo", new Date()); %>
<c:set target="${foo}" property="year" value="107" />
<c:set target="${foo}" property="month" value="11" />
<c:set target="${foo}" property="date" value="5" />
<c:set target="${foo}" property="hours" value="0" />
<c:set target="${foo}" property="minutes" value="0" />
<c:set target="${foo}" property="seconds" value="0" />
<fmt:formatDate value="${foo}" type="both" />
value 属性を省略した場合はタグ内の文字列が設定されます。
[<c:set var="aiueo">あいうえお<b>hoge</b>${1+1}</c:set>]
<c:out value="${aiueo}" />
[] の外で出力されていることからタグ内の文字列が <c:out>
に引き渡されていることが分かります。
[] あいうえお<b>hoge</b>2