Tôi đang cố gắng làm điều gì đó có vẻ tương đối đơn giản và chạy vào một bức tường.Biểu thức JSP và Tên thuộc tính động
Giả sử tôi có danh sách sản phẩm mà tôi trưng ra dưới dạng thuộc tính yêu cầu dưới tên products
. Cũng hãy nói rằng mỗi sản phẩm có một trường id
và tôi cũng có một loạt các thuộc tính yêu cầu được đặt ở dạng selectedProduct_<product-id>
để chỉ ra những sản phẩm nào được chọn.
Tôi hiểu có những cách tốt hơn để thể hiện thông tin này, chẳng hạn như đặt tất cả các id đã chọn vào Map
và kiểm tra điều đó, nhưng hãy giả sử rằng tôi không có quyền truy cập vào phương pháp đó vì bất kỳ lý do gì.
Vì vậy, điều tôi muốn làm là lặp lại products
và chỉ phát ra một số đánh dấu nếu có thuộc tính selectedProduct_...
được đặt cho sản phẩm hiện tại. Một cái gì đó như:
<c:forEach var="product" items="${products}">
<c:if test="${! empty selectedProduct_${product.id}}">
<div class="productId">${product.id}</div>
</c:if>
</c:forEach>
Nhưng tất nhiên điều đó không hiệu quả, khi nó chết trên ${! empty selectedProduct_${product.id}}
.
gì sẽ làm việc là nếu tôi hardcode sản phẩm-id vào biểu hiện, như:
${! empty selectedProduct_17}
... giả định rằng '17' là một id sản phẩm hợp lệ. Rõ ràng đó là không thực tế, nhưng hy vọng nó minh họa những gì tôi đang cố gắng để thực hiện. Về cơ bản, tôi cần phải:
- Xác định giá trị
selectedProduct_...
chính xác để sử dụng cho mỗi lần lặp trong vòng lặpforEach
. Một cái gì đó đơn giản như<c:set var="key" value="selectedProduct_${product.id}"/>
sẽ làm điều này, ngoại trừ tôi không chắc chắn làm thế nào để sau đó mấtkey
và sử dụng nó để có được giá trị của thuộc tính yêu cầu với tên đó (không gian lận và chạy mã Java chữ bên trong một khối<% %>
). - Lấy giá trị của thuộc tính yêu cầu có tên tôi đã xác định trong # 1. Đây có vẻ là một phần khó khăn.
Có thể sử dụng JSP/JSTL tinh khiết không? Tôi biết tôi có thể chạy một số mã Java bên trong của <% %>
để giải quyết điều này, nhưng điều đó có vẻ như nó sẽ ở dạng cực kỳ xấu. Chắc chắn một giải pháp thanh lịch hơn tồn tại?