我正在尝试做一些看起来应该相对简单并且遇到一些障碍的事情。
假设我有一个产品列表,我在 name 下作为请求属性公开products
。还假设每个产品都有一个id
字段,并且我还设置了一堆请求属性,以 的形式selectedProduct_<product-id>
指示选择了哪些。
我知道有更好的方法来表示此信息,例如将所有选定的 id 放入 aMap
并对其进行检查,但让我们假设无论出于何种原因我都无法使用该方法。
所以我想做的是products
仅在selectedProduct_...
为当前产品设置属性时迭代并发出一些标记。就像是:
<c:forEach var="product" items="${products}">
<c:if test="${! empty selectedProduct_${product.id}}">
<div class="productId">${product.id}</div>
</c:if>
</c:forEach>
但这当然行不通,因为它会在${! empty selectedProduct_${product.id}}
.
如果我将产品 ID 硬编码到表达式中,将会起作用,例如:
${! empty selectedProduct_17}
...假设“17”是有效的产品 ID。显然这不切实际,但希望它说明了我正在努力实现的目标。基本上我需要:
- 确定循环中每次迭代使用的正确
selectedProduct_...
值forEach
。这样做很简单<c:set var="key" value="selectedProduct_${product.id}"/>
,除了我不确定如何获取key
并使用它来获取具有该名称的请求属性的值(没有作弊和在<% %>
块内运行文字 Java 代码)。 - 获取我在 #1 中确定的名称的请求属性的值。这似乎是棘手的部分。
这可能使用纯 JSP/JSTL 吗?我知道我可以在其中运行一些 Java 代码<% %>
来解决这个问题,但这似乎是非常糟糕的形式。肯定存在更优雅的解决方案吗?