- PR -

JSPのEL式

1
投稿者投稿内容
どもんじょ
会議室デビュー日: 2003/06/17
投稿数: 10
投稿日時: 2006-11-29 10:47
JSPをJSTLを使って書いています。
そこで質問ですが、動的に取得した文字列を名称とした値をとってくることは可能でしょうか?
分かりにくいのでコードで説明します。

コード:
<c:set var="a01" value="${abc}"/>
<c:set var="a02" value="${a01}"/>


これではa01とa02には同じ値が入ることになります。

そうではなく、
コード:
<c:set var="a01" value="${abc}"/>
<c:set var="a02" value="${${a01}}"/>


というように、a01の値を名称とした値をとってきたいのです。(もちろん上記はエラーになります)

下記のように書けばできることは分かっているのですが、なんとかタグだけできれいに書きたいと思いまして。
コード:
<c:set var="a01" value="${abc}"/>
<%
 String a01 = (String) pageContext.getAttribute("a01");
 String a02 = (String) request.getAttribute(a01);
 pageContext.setAttribute("a02", a02);
%>


ご教授ください。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-11-29 14:11
純粋にELのみでは不可能でしょう。
タグライブラリを作って対処するのが王道かと思います。
いや、それ以前にそんなことをしないといけないデータの渡し方を見直すのがよいのかもしれません。

なんでもかんでもsetAttributeしてるとそうなるのかもしれませんが、
たとえばあらかじめハッシュにしてsetAttributeしていれば、
コード:
// Servlet側
Map map = new HashMap();
map.put("a", "data - a");
map.put("b", "data - b");
map.put("c", "data - c");
request.setAttribute("keywordMap", map);

// JSP側
<c:set var="a01" value="a"/>
<c:out value="${keywordMap[a01]}"/>


ということができるわけです。
EL式ではMapにアクセスする場合に["key"]という添え字で
指定のキーに対する値を取得できますし、
Listであれば[3]といった記述でList.get(3)相当のことが出来ます。
どもんじょ
会議室デビュー日: 2003/06/17
投稿数: 10
投稿日時: 2006-11-29 14:32
nagiseさま、ご回答ありがとうございました。

おっしゃるとおり、あらかじめハッシュにしてsetAttributeする方法でやったところ、きれいなソースになりました!
もともとあったソースの改修だったので、改修範囲を少なくするためにJSP側だけで対応することしか考えていませんでした。
もっと頭を柔らかくしないといけませんね。

とても参考になりました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)