私は、それが比較的簡単で壁の一部に走らなければならないような何かをしようとしています。JSPの式と動的な属性の名前
たとえば、リクエスト属性として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}}
に死ぬとして、動作しませんもちろん。 「17」は、有効な製品IDであると仮定すると...
${! empty selectedProduct_17}
:私は式に製品IDをハードコーディング場合は動作します何
は次のように、です。明らかにそれは実用的ではありませんが、私が達成しようとしていることがうまくいけばうまくいきます。基本的に私のことを行う必要があります
- は
forEach
ループ内の各反復のために使用する正しいselectedProduct_...
値を決定します。私はkey
をどのように受け取り、その名前のリクエスト属性の値を得るために使うのか分からないことを除いて(<% %>
ブロック内でリテラルJavaコードを実行して実行しないで)、<c:set var="key" value="selectedProduct_${product.id}"/>
という単純なものがこれを行うでしょう。 - 名前が#1で決定されたリクエスト属性の値を取得します。これは難しい部分のようです。
これは純粋なJSP/JSTLを使用して可能ですか?私はこれを解決するために<% %>
の中にいくつかのJavaコードを走らせることができますが、それは非常に悪い形になるようです。確かにより洗練されたソリューションが存在しますか?