JSP-Ausdruckssprache und dynamische Attributnamen

Ich versuche, etwas zu tun, das so aussieht, als ob es relativ unkompliziert wäre und gegen eine Wand stößt.

Angenommen, ich habe eine Liste von Produkten, die ich als Anforderungsattribut unter dem Namen ausstelleproducts. Sagen wir auch, dass jedes Produkt eine hatid Feld, und dass ich auch eine Reihe von Anforderungsattributen in Form von gesetzt habenselectedProduct_<product-id> um anzuzeigen, welche ausgewählt sind.

Ich verstehe, dass es bessere Möglichkeiten gibt, diese Informationen darzustellen, z. B. das Platzieren aller ausgewählten IDs in aMap und dagegen zu prüfen, aber nehmen wir an, dass ich aus irgendeinem Grund keinen Zugang zu diesem Ansatz habe.

Ich würde also gerne iterierenproducts und nur dann etwas Markup ausgeben, wenn es eine gibtselectedProduct_... Attributsatz für das aktuelle Produkt. So etwas wie:

<c:forEach var="product" items="${products}">
    <c:if test="${! empty selectedProduct_${product.id}}">
        <div class="productId">${product.id}</div>
    </c:if>
</c:forEach> 

Aber das funktioniert natürlich nicht, denn es stirbt weiter${! empty selectedProduct_${product.id}}.

Was wird funktionieren, wenn ich die Produkt-ID in den Ausdruck einkodiere, wie:

${! empty selectedProduct_17}

... unter der Annahme, dass '17' eine gültige Produkt-ID ist. Das ist natürlich nicht praktisch, aber es zeigt hoffentlich, was ich erreichen will. Grundsätzlich muss ich:

Bestimmen Sie die richtigeselectedProduct_... Wert, der für jede Iteration in derforEach Schleife. So einfach wie<c:set var="key" value="selectedProduct_${product.id}"/> würde dies tun, außer ich bin mir nicht sicher, wie ich es dann nehmen sollkey und verwenden Sie es, um den Wert des Anforderungsattributs mit diesem Namen abzurufen (ohne zu schummeln und wörtlichen Java-Code in einem auszuführen<% %> Block).Ruft den Wert des Anforderungsattributs ab, dessen Namen ich in # 1 bestimmt habe. Dies scheint der schwierige Teil zu sein.

Ist das mit reinem JSP / JSTL möglich? Ich weiß, ich könnte etwas Java-Code innerhalb von ausführen<% %> dies zu lösen, aber das scheint in einer äußerst schlechten Form zu sein. Sicherlich gibt es eine elegantere Lösung?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage