2013-04-22 80 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