在EL中连接变量名

时间:2013-04-22 13:49:02

标签: jsp jstl el

我有5个变量需要在打开的foreach中使用,所以我将每个变量命名为IMG1 IMG2 IMG3 IMG4 IMG5。我想知道如何像这样调用图像的src

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内部已经创建了这样的东西 所以它用正确的名称来获取变量。

2 个答案:

答案 0 :(得分: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 -->

答案 1 :(得分:0)

在JSP-EL +中纯粹是为了数字。试着这样做:

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