2013-04-22 2 views
0

У меня есть 5 переменных, которые необходимо использовать внутри открытого foreach, поэтому я назвал каждую переменную, как IMG1 IMG2 IMG3 IMG4 IMG5. Я хотел бы знать, как вызвать СРК изображения, как этогоНазвания переменных Concatente в EL

src="${IMG + index of the foreach}" 

так называют Foreach новым образом.

редактировать:

у меня есть эти пяти переменных

<c:set var="imgPN1" value="23421E1" /> 
<c:set var="imgPN2" value="32543QS" /> 
<c:set var="imgPN3" value="23945ZS" /> 
<c:set var="imgPN4" value="23421E0" /> 
<c:set var="imgPN5" value="34352WS" /> 

и внутри Еогеаспа мне нужно поместить каждый из этих переменных в воображаемом ЦСИ Таким образом, проблема в том, что я рассчитывать использовать другой Еогеасп внутри foreach, уже использованный, причина будет генерировать 25 img вместо 5, так что мне понадобится, использует varstatus или какой-то индекс, уметь делать внутри foreach уже созданный что-то вроде этого , чтобы он подбирал переменную с ее собственным именем ,

+1

Это ужасный способ делать это. Поместите все свои переменные в список, добавьте список для запроса атрибутов и повторите его. –

+0

ОК, я действительно не знаю много из jslt, не могли бы вы объяснить это с помощью примера, пожалуйста? –

+0

Я сделаю вам лучше и [ссылка на этот вопрос] (http://stackoverflow.com/questions/2117557/how-to-iterate-an-arraylist-inside-a-hashmap-using-jstl), который имеет все детали. –

ответ

0

В JSP-EL + чисто для чисел. Попробуйте сделать это вместо:

src="${IMG}${index}" 
1

я понял, что вы подготовили изображения следующим образом по какой-то причине:

request.setAttribute("IMG1", img1); 
request.setAttribute("IMG2", img2); 
request.setAttribute("IMG3", img3); 
request.setAttribute("IMG4", img4); 
request.setAttribute("IMG5", img5); 

Чтобы конкретно ответить на ваш вопрос, сначала нужно создать еще одну переменную, которая представляет область видимости имени атрибута с <c:set>, то вы можете использовать это в качестве ключа нужной карты области, например ${requestScope} для запроса атрибутов:

<c:forEach begin="1" end="5" varStatus="loop"> 
    <c:set var="imgId" value="IMG${loop.index}" /> 
    <img src="${requestScope[imgId]}" /> 
</c:forEach> 

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

String[] images = new String[] { img1, img2, img3, img4, img5 }; 
request.setAttribute("images", images); 

Так что вы можете получить доступ к нему следующим образом:

<c:forEach items="${images}" var="image"> 
    <img src="${image}" /> 
</c:forEach> 

Вы даже можете получить доступ к элементу по заданному индексу непосредственно, когда не внутри цикла:

<img src="${images[2]}" /> <!-- returns img3 --> 
+0

на самом деле не знает, изменит ли он что-либо, но они установлены с помощью , и проблема в том, что я уже в foreach, поэтому, если используйте foreach AGAIN, он снова будет умножен и опубликует 25 изображений вместо 5, которые мне нужны, что мне действительно нужно, чтобы конкатрировать имя переменной, поэтому он вызывает $ {IMG + индекс}, поэтому, когда он делает для каждый, вызовет каждый другой источник. –

+0

Извините, я понятия не имею, что вы имеете в виду. Вы пробовали код в ответе? Вы звучите так, как вы этого не понимали, и на самом деле никогда не пробовали. В противном случае отредактируйте свой вопрос, чтобы включить SSCCE, который показывает, как вы готовите данные, и как именно вы хотите, чтобы сгенерированный HTML выглядел так. – BalusC

+0

ОК, отредактированный, вы можете проверить сейчас, пожалуйста? –

Смежные вопросы