web-dev-qa-db-ja.com

EL内の別の変数の名前になるように文字列と変数の値を組み合わせる

私はこのようなことをしたいです:

<display:table name="${summary${index}}">

ただし、機能せず、例外がスローされます。「$ {summary $ {selChrm}}」に無効な式が含まれています。ユーザーがドロップダウンリストを使用して選択項目を選択し、変数インデックスに配置することを希望します。次に、対応するjavabeanオブジェクトのリストがテーブルに表示されます。名前はsummary01、summary02などです。どうすればよいですか。前もって感謝します。


更新:みんなありがとう。問題は、ネストされたELにあります。使ってみた

<display:table name="summary${index}">

しかし、summary01は変数名なので、テーブルには何も表示されません。変数名をハードコーディングすると、機能します。

<display:table name="${summary01}">

したがって、ELをネストするにはどうすればよいですか? JSTLにない可能性がある場合、ユーザーがドロップダウンリストを使用して、テーブルに表示するコンテンツを決定する動作を実現するにはどうすればよいですか?再度、感謝します。

14
Ken

EL式をネストすることはできません。ただし、それらを連結することはできます。

<display:table name="${summary}${index}">

または、${summary}が実際にはどのスコープのオブジェクトでもない場合は、

<display:table name="summary${index}">

更新:OK、実際には${summary01}にアクセスする必要があります。スコープが事前にわかっている場合は、ブレース表記を使用してアクセスできます。それがリクエストスコープであると想像してください、あなたは以下のようにそれに「プレーン」にアクセスできます:

<display:table name="${requestScope['summary01']}">

しかし、中括弧で別のEL変数を実際に使用することもできます(引用符を外すだけです)。

<display:table name="${requestScope[summary]}">

そこで、どこかに設定したいと思います。 JSTL c:setタグは、これに完全に適しています。

<c:set var="summary" value="summary${index}" />
18
BalusC

第一歩:

<c:set var="summary" value="${requestScope['summary'.concat(index)]}" />

ステップ2:

<display:table name="${summary}">

そのような単純な :)

[〜#〜] update [〜#〜] BalusCがコメントで述べたように、これを使用するには3.0サーブレットが必要です。

3
Minutis

これはJSTLについて本当にうんざりすることです。それを行う直接的な方法はありませんif実行したいindide JSTL式。つまり、文字列連結演算子はありません。

いつでもできる

 <something foo='${something} ${something_else}'/>

しかし、それが常に役立つわけではありません。

私の世界では、独自の「連結」関数を実装しているので、

$(foo:bar(mystuff:concat("something", something.else))}
1
Pointy

それは私のために働いた。

${not empty marginLeft ? 'margin-left:'.concat(marginLeft) : ''}
0