In a Java web application, you need to iterate over a List<Map<String, Object>> stored in the request scope under the key dataList. Each Map represents a row of data with keys "id", "name", and "status". Using JSTL, which of the following correctly iterates over this list and displays only the name of entries where status equals "active"?
Các phương án trả lời
Chọn một phương ánLời giảiChọn phương án để mở
Đáp án đúng: "<c:forEach
var="row" items="${dataList}"><c:if test="${row.status eq 'active'}">${
row.name
}</c:if></c:forEach>". Thuộc tính items nhận tập nguồn còn var đặt tên cho biến phần tử, nên items phải trỏ tới danh sách trong phạm vi request và var là biến từng dòng; trong thân vòng lặp mỗi phần tử là một Map nên biểu thức row.status được EL dịch thành phép tra khoá. Toán tử eq so sánh giá trị chuỗi và chịu được giá trị rỗng, còn thẻ điều kiện c:if đứng một mình hợp lệ. Lựa chọn chứa "<c:
if test="${row.status.equals("active")}">"vỡ ngay ở pha dịch vì dấu nháy kép lồng vào một giá trị thuộc tính đã mở bằng nháy kép, bộ phân tích đóng thuộc tính sớm. Lựa chọn chứa "<c:when test="${row.status == 'active'}">" đặt thẻ sai chỗ: c:when chỉ hợp lệ khi nằm trực tiếp trong c:choose, đứng lẻ trong vòng lặp sẽ lỗi. Lựa chọn chứa "<c:forEach
var="dataList" items="${row}">"đảo vai hai thuộc tính, thành ra lặp trên một biến chưa tồn tại và đặt tên biến phần tử trùng tên danh sách, nên không duyệt được gì.