Подтвердить что ты не робот

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

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

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

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


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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

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

Ответ 2

Шаг первый:

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

Шаг второй:

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

Просто как это:)

UPDATE, поскольку BalusC, упомянутый в комментариях, вам нужно 3.0 сервлета, чтобы использовать это.

Ответ 3

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

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

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

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

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

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

Ответ 4

Это сработало для меня.

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