Объединение строки со значением переменной, чтобы быть названием другой переменной в EL

Я хочу сделать что-то вроде этого:

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

Но это не работает, выдает исключение: "$ {summary$ {selChrm}}" содержит недопустимое выражение (выражения). Я хотел бы, чтобы пользователь использовал выпадающий список, чтобы выбрать выбор и вставить переменный индекс. Затем таблица покажет соответствующий список объектов javabean, т.е. названный summary01, summary02, и т.д. Как я могу сделать это?Заранее спасибо.


Обновление:Спасибо, ребята. проблема с вложенным EL. Я пытался использовать

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

Но ничто не показывает в таблице, так как summary01 является именем переменной. Если я трудно кодирую имя переменной, то оно будет работать:

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

Поэтому, как я могу сделать вложенный EL? Если это не находится возможно в JSTL, как я могу достигнуть поведения, которое пользователь может использовать выпадающий список для определения что содержанием быть дисплеем в таблице? Еще раз спасибо.

13
задан BalusC 28 June 2010 в 11:23
поделиться

2 ответа

Вы не можете вкладывать выражения EL. Однако вы можете просто объединить их.

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

Или, если $ {summary} на самом деле не является объектом ни в одной из областей, выполните

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

Обновите : Хорошо, вам действительно нужен доступ к $ {summary01} . Если вы заранее знаете область действия, вы можете получить к ней доступ, используя обозначение фигурных скобок. Представьте, что это запрос ограничен областью действия, вы можете получить к нему "простой" доступ следующим образом:

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

Но на самом деле вы также можете использовать другую переменную EL в фигурных скобках (просто уберите ее из кавычек):

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

Итак, мы хотели бы установить ее где-нибудь . Тег JSTL c: set идеально подходит для этого:

<c:set var="summary" value="summary${index}" />
18
ответ дан 1 December 2019 в 22:22
поделиться

Это то, что действительно плохо в JSTL: нет прямого способа сделать это если вы хотите сделать это внутри выражения JSTL. Нет оператора конкатенации строк, другими словами.

Вы всегда можете сделать

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

но это не всегда полезно.

В моем мире я реализовал свою собственную функцию "concat", поэтому я могу сказать

$(foo:bar(mystuff:concat("something", something.else))}
1
ответ дан 1 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: