Используя Spring MVC 3.0, из моего контроллера, когда я добавляю объект List
в качестве атрибута к моей модели, он преобразуется в String
в моем шаблоне JSP.
Вот упрощенная версия моего контроллера:
@Controller
@RequestMapping("/reservationQuery")
public class ReservationQueryController {
@RequestMapping(method = RequestMethod.GET)
public void setupForm(Model model) {
List<Reservation> reservations = java.util.Collections.emptyList();
model.addAttribute("reservations", reservations);
}
}
Точка останова в последней строке подтверждает, что переменная reservations
является пустой List
. Вот оговоркаQuery.jsp:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:forEach items="${reservations}" var="reservation">
...
</c:forEach>
Точка останова в начале цикла c:forEach
показывает, что List
, reservations
, было преобразовано в представление String
пустого списка, "[]". Почему?
Столь же странным является тот факт, что страница пытается выполнить итерацию, даже если строка не является итеративной (ну, возможно, это символьно, но это не то, что происходит). Даже если я установлю reservations
в пустую строку, он также попытается выполнить итерацию. Конечно, он выдает исключение в цикле, когда я пытаюсь получить доступ к свойству reservation
, которое не существует. В обоих случаях reservation
было установлено в строку со значением "{reservations}". WTF?
- Почему атрибут
reservations
преобразуется из List
в String
?
- И почему JSP выполняет итерацию строки, устанавливая переменную
forEach
в буквальную строку "{reservations}"?