Câu hỏi: PRJ301 Phát triển ứng dụng Java web – Bộ ôn tập cuối kỳ số 4
50 câu trắc nghiệm kèm lời giải của môn PRJ301 - Phát triển ứng dụng Java web, xếp đúng thứ tự trong đề.
Danh sách câu hỏi
<p>${user.name}</p>
</c:forEach>
<p>End of list</p>Đá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ì.
Đáp án đúng: "${myList[0]}". Cách duy nhất EL định nghĩa để lấy phần tử theo vị trí là toán tử ngoặc vuông kèm chỉ số, nên biểu thức này trả về phần tử đầu của danh sách; EL còn tự ép chuỗi số viết trong ngoặc về số nguyên khi tập là danh sách hay mảng. "${
myList.getFirst()
}
"dựa vào việc gọi một phương thức mang tên đó trên danh sách, trong khi thứ cần ở đây là chỉ số, và danh sách dùng trong JSP không được lấy phần tử đầu theo kiểu gọi phương thức như vậy. "${myList.first}" dùng dấu chấm nên EL hiểu là đọc một thuộc tính tên first theo quy ước bean, tức đi tìm phương thức đọc tương ứng; danh sách không có thuộc tính như thế nên biểu thức báo không tìm thấy thuộc tính. "${myList.getFirst}" còn xa hơn: viết sau dấu chấm nên nó bị hiểu là tên một thuộc tính bắt đầu bằng get, EL sẽ tìm phương thức đọc của chính thuộc tính ấy và cũng không có.
ServletContextAttributeListenerServletRequestListenerHttpSessionListenerServletContextListenerweb.xmlserver.xmlcontext.xmlapplication.properties