Lenguaje de expresión JSP y nombres de atributos dinámicos

Estoy tratando de hacer algo que parece que debería ser relativamente sencillo y chocar contra una pared.

Digamos que tengo una lista de productos que expongo como un atributo de solicitud con el nombreproducts. Digamos también que cada producto tiene unaid campo, y que también tengo un conjunto de atributos de solicitud establecidos en forma deselectedProduct_<product-id> para indicar cuáles están seleccionados.

Entiendo que hay mejores formas de representar esta información, como colocar todos los identificadores seleccionados en unMap y verificando eso, pero asumamos que no tengo acceso a ese enfoque por cualquier razón.

Así que lo que me gustaría hacer es iterarproducts y emitir algún marcado sólo si hay unaselectedProduct_... atributo establecido para el producto actual. Algo como:

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

Pero, por supuesto, eso no funciona, ya que muere en${! empty selectedProduct_${product.id}}.

Lo que funcionará es si codifico el producto-id en la expresión, como:

${! empty selectedProduct_17}

... asumiendo que '17' es una identificación de producto válida. Obviamente eso no es práctico, pero espero que ilustre lo que estoy tratando de lograr. Básicamente necesito:

Determinar la correctaselectedProduct_... valor a utilizar para cada iteración en elforEach lazo. Algo tan simple como<c:set var="key" value="selectedProduct_${product.id}"/> haría esto, excepto que no estoy seguro de cómo tomarkey y úselo para obtener el valor del atributo de solicitud con ese nombre (sin hacer trampa ni ejecutar el código de Java literal dentro de un<% %> bloquear).Obtenga el valor del atributo de solicitud cuyo nombre determiné en # 1. Esta parece ser la parte difícil.

¿Es esto posible usando JSP / JSTL puro? Sé que podría ejecutar algún código Java dentro de<% %> para resolver esto, pero parece que estaría en una forma extremadamente mala. ¿Seguro que existe una solución más elegante?

Respuestas a la pregunta(1)

Su respuesta a la pregunta