Объединение в JSP / EL через цикл - PullRequest
1 голос
/ 09 июля 2010

Так что я пытаюсь сделать что-то, что может оказаться невозможным. Я хочу перебрать что-то вроде этого:

я задан как итератор

<c:forEach begin="1" end="${total}" var="i">
   <td>${prod${i}.name}</td>
</c:forEach>

Это, очевидно, не работает, но я думаю, что изображает то, что я пытаюсь сделать.

Я хочу объединить переменную в другую переменную, где я - то, что я хочу объединить в prod.name. Обычно название продукта будет примерно таким: $ {prod1.name}. Поэтому я хочу заменить 1 итератором, когда он проходит через цикл.

Я очень плохо знаком с разработчиками JSP и EL. Так что, если я делаю это совершенно неправильно, пожалуйста, скажите мне.

Спасибо

Ответы [ 3 ]

1 голос
/ 09 июля 2010

Самый простой (и наиболее распространенный) способ справиться с подобными вещами - это поместить вашу группу продуктов в коллекцию: например, у вас есть список объектов Product, который передается в JSP, а затем вы делаете

<c:forEach items="${products}" var="product">
   <td>${product.name}</td>
</c:forEach>
1 голос
/ 09 июля 2010

Не может быть сделано. Мой совет: реструктурируйте ваш код так, чтобы prod был массивом или коллекцией, а затем используйте c: forEach для перебора его элементов.

0 голосов
/ 10 июля 2010

Если область видимости объекта заранее известна, то вы можете обойти это, составив ключ, используя <c:set> и выбрав объект непосредственно из карты с областью видимости, используя обозначение фигурных скобок.Вот пример, предполагающий, что ${prod1} и т. Д. Должны быть получены из запроса scope:

<c:forEach begin="1" end="${total}" var="i">
   <c:set var="prod" value="prod${i}" />
   <td>${requestScope[prod].name}</td>
</c:forEach>

Если он находится в session scope, используйте *Вместо 1012 * и для области приложения используйте вместо нее ${applicationScope[prod].name}.

Несмотря на это, это не рекомендуемый подход.Вы должны поместить в область действия List<Product> и выполнить итерацию, как продемонстрировал JacobM.

См. Также:

...