2013-04-22 57 views
0

我有5個變量需要在打開的foreach中使用,所以我將每個變量命名爲IMG1 IMG2 IMG3 IMG4 IMG5。我想知道如何調用圖像的src這樣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我需要把每一個這個變量的一個圖片src所以裏面,問題是,我算裏面使用其他的foreach已經使用的foreach,原因會生成25 img而不是5,所以我需要的是使用varstatus或者一些索引,能夠在foreach內部創建類似這樣的東西 ,因此它會用它的專有名稱來獲取變量。

+1

這是一個可怕的方式做到這一點。將所有變量放在列表中,將列表添加到請求屬性中,然後遍歷它。 – 2013-04-22 13:51:20

+0

好的,我真的不知道jslt的很多,你能用一個例子來解釋一下嗎? – 2013-04-22 13:56:54

+0

我會爲你做一個更好的和[鏈接到這個問題](http://stackoverflow.com/questions/2117557/how-to-iterate-an-arraylist-inside-a-hashmap-using-jstl)哪所有的細節。 – 2013-04-22 13:58:47

回答

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再次,它會再次繁殖和張貼25圖像,而不是我需要的5,我真正需要的是連接變量名稱,所以它調用$ {IMG +索引},所以當它爲每個都會調用每個不同的來源。 – 2013-04-22 15:42:00

+0

對不起,我不知道你的意思。你有沒有試過答案中的代碼?你聽起來像你沒有理解它,實際上從來沒有嘗試過。否則,請編輯您的問題以包含一個SSCCE,其中顯示了您準備數據的方式以及您希望生成的HTML最終看起來如何。 – BalusC 2013-04-22 15:43:35

+0

好,已編輯,你現在可以檢查嗎? – 2013-04-22 15:48:04