Język wyrażeń JSP i dynamiczne nazwy atrybutów

Próbuję zrobić coś, co wydaje się być stosunkowo proste i wpaść na kawałek ściany.

Powiedzmy, że mam listę produktów, które ujawniam jako atrybut żądania pod nazwąproducts. Powiedzmy również, że każdy produkt maid pole, a także że mam zestaw atrybutów żądania w postaciselectedProduct_<product-id> aby wskazać, które są wybrane.

Rozumiem, że istnieją lepsze sposoby reprezentowania tych informacji, takie jak umieszczenie wszystkich wybranych identyfikatorów wMap i sprawdzanie tego, ale załóżmy, że nie mam dostępu do tego podejścia z jakiegokolwiek powodu.

Więc chciałbym zrobić iteracjęproducts i emitować jakieś znaczniki tylko wtedy, gdy jestselectedProduct_... zestaw atrybutów dla bieżącego produktu. Coś jak:

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

Ale oczywiście to nie działa, ponieważ umiera${! empty selectedProduct_${product.id}}.

To, co zadziała, to kodowanie identyfikatora produktu do wyrażenia, na przykład:

${! empty selectedProduct_17}

... zakładając, że „17” jest prawidłowym identyfikatorem produktu. Oczywiście to nie jest praktyczne, ale mam nadzieję, że ilustruje to, co próbuję osiągnąć. Zasadniczo muszę:

Określ poprawneselectedProduct_... wartość do użycia dla każdej iteracji wforEach pętla. Coś tak prostego jak<c:set var="key" value="selectedProduct_${product.id}"/> zrobiłby to, chyba że nie jestem pewien, jak to zrobićkey i użyj go, aby uzyskać wartość atrybutu żądania o tej nazwie (bez oszukiwania i uruchamiania dosłownego kodu Java wewnątrz a.)<% %> blok).Uzyskaj wartość atrybutu żądania, którego nazwę określiłem w # 1. To wydaje się być trudną częścią.

Czy jest to możliwe przy użyciu czystego JSP / JSTL? Wiem, że mogę uruchomić kod Java w środku<% %> aby rozwiązać ten problem, ale wygląda na to, że będzie w wyjątkowo złej formie. Z pewnością istnieje bardziej eleganckie rozwiązanie?

questionAnswers(1)

yourAnswerToTheQuestion