我试图做一些事情,似乎应该是相对简单和运行到有点墙。
比方说,我已经得到了我公开为下名称的请求属性的产品清单products
。 我们还假设每个产品具有一id
字段,并且我也有一堆请求属性的形式设置selectedProduct_<product-id>
以指示选择哪些。
我知道有更好的方式来表示这些信息,如所有的选择IDS放置成Map
,并检查针对的,但让我们假设我没有访问该方法无论出于何种原因。
所以我想要做什么是迭代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}}
${! 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代码<% %>
来解决这个问题,但是,似乎这将是非常糟糕的形式。 当然一个更优雅的解决方案存在?