我正在嘗試做一些看起來應該相對簡單的事情,並且運行到一堵牆上。JSP表達式和動態屬性名稱
比方說,我有一個產品清單,我以products
的名稱公開爲請求屬性。我們還要說,每個產品都有一個id
字段,並且我還有一組以selectedProduct_<product-id>
的形式設置的請求屬性,以指示哪些字段被選中。
我知道有更好的方法來表示這些信息,比如將所有選中的ID都放入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}}
的但是。
什麼工作是,如果我硬編碼的產品ID到表達,如:
${! empty selectedProduct_17}
...假設「17」是一個有效的產品ID。顯然這不切實際,但希望能夠說明我正在努力完成的事情。基本上我需要:
- 確定正確的
selectedProduct_...
值用在forEach
循環每次迭代。像<c:set var="key" value="selectedProduct_${product.id}"/>
這樣簡單的操作就可以做到這一點,除非我不確定如何取key
並使用它來獲取具有該名稱的請求屬性的值(無需作弊並在<% %>
塊內運行文字Java代碼)。 - 獲取我在#1中確定其名稱的請求屬性的值。這似乎是一個棘手的部分。
這是可能的使用純JSP/JSTL?我知道我可以在<% %>
的內部運行一些Java代碼來解決這個問題,但是這看起來像是非常糟糕的形式。當然存在更優雅的解決方案?通過