<c:set>
xmlns:c="http://java.sun.com/jsp/jstl/core"

SYNOPSIS

<c:set
var†1="変数名"
value=""
target†1="オブジェクト"
property="プロパティ名"
scope="page|request|session|application"
>
value 属性が省略されたときの値.
</c:set>

説 明

変数に値を設定します。ページ内で使用する定数値を JSP の先頭で宣言しておいたり、EL で評価した結果をあちこちで使いまわす場合などに使用します。

このタグには 3 種類の使い方がありますので注意してください。

  1. pageContext.setAttribute() で特定のスコープに属性値として値を格納する。
  2. Map の値として設定する。
  3. Bean のプロパティとして値を設定する。
参照: <c:out>  <c:remove> 

属 性

var="変数名"
selective required 1

変数に値を設定します (変数名は固定であるためここに EL は記述できません)。これは pageContext.setAttribute(var,value,scope)Java™ API リファレンス と同じ結果になります。

後続の EL でこの変数名を使用して設定値を参照することが出来ます。

value=""
optional

設定する値です。

この属性が省略された場合、タグ内の評価結果が文字列として設定されます。 XML などの長い文字列を設定したい場合はタグ内に記述したほうが読みやすくなります。

target="オブジェクト"
selective required 1

値の設定先となるオブジェクトを指定します。この値は EL で記述しなければならないので注意してください。値が null の場合は例外が発生します。

設定先のインスタンスが Map インターフェースを実装している場合、プロパティ名をキーとして Map#put(property,value)Java™ API リファレンス が行われます (value が null の場合は Map#remove(property) となります)。

Map が実装されていない場合は Bean と見なされ、プロパティ名に対する setter が呼び出されます。

property="プロパティ名"
optional

値の設定先のプロパティです。 target のインスタンスが Map の場合はキー名を、 Bean の場合はプロパティ名を意味します。target 属性を指定した場合は必須です。

target が Bean であり、このプロパティ名に対する setter が実装されていない場合は例外が発生します。

scope="page|request|session|application"
optional

var で指定した変数のスコープです。 page, request, session, application のいずれかを指定します。

page はこのリクエストのこのページ内の処理でだけ有効な変数を意味し、 include や forward した先では値を参照できません。 request はこのリクエスト全体にわたって有効な変数です。 include や forward 先でも参照できますが、次以降のリクエストでは参照できません。 session はユーザのセッションに渡って有効な変数です。 application は全ユーザ共通して参照できる変数です。スコープの詳細については PageContextJava™ API リファレンス を参照してください。

内 容

value 属性が省略されたときの値。EL や拡張タグを使用することができます。

使用例

新しく変数を設定します。実行結果は「hello, world」となります (未設定の null 値は何も出力されないため)。
JSP
<c:out value="${foo}" />
<c:set var="foo" value="hello, world" />
<c:out value="${foo}" />
スコープ内の既存の変数を上書きします。実行結果は「1 2」となります。
JSP
<% pageContext.setAttribute("foo", "1", PageContext.PAGE_SCOPE); %>
<c:out value="${foo}" />
<c:set var="foo" value="2" />
<c:out value="${foo}" />
<jsp:include> 先で使用するオブジェクトを設定しておきたい場合には request スコープを使用します。
JSP
<c:set var="foo" value="100" scope="request" />
<jsp:forward page="page.jsp" flush="true" />

// page.jsp
<c:out value="${foo}" />
Map に値を格納します。出力結果は「{bar=2}」となります。
JSP
<% pageContext.setAttribute("foo", new HashMap()); %>
<c:set target="${foo}" property="bar" value="${1+1}" />
<c:out value="${foo}" />
Bean のプロパティに値を設定します (Date が Bean かどうかは疑問ですが標準 API で適切な Bean が思いつかないので例として使用しています)。 Date#setYear(107), Date#setMonth(11) などが呼び出されて「2007/12/05 0:00:00 」という結果になります。
JSP
<% 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 属性を省略した場合はタグ内の文字列が設定されます。
JSP
[<c:set var="aiueo">あいうえお<b>hoge</b>${1+1}</c:set>]
<c:out value="${aiueo}" />
この処理結果は以下の通り。[] の外で出力されていることからタグ内の文字列が <c:out> に引き渡されていることが分かります。
HTML
[]
あいうえお&lt;b&gt;hoge&lt;/b&gt;2
			
CVS 2008/03/09