Атрибут модели Spring MVC 3.0 неожиданно преобразуется из списка в строку в JSP - PullRequest
1 голос
/ 16 марта 2011

Используя 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?

  1. Почему атрибут reservations преобразуется из List в String?
  2. И почему JSP выполняет итерацию строки, устанавливая переменную forEach в буквальную строку "{reservations}"?

1 Ответ

0 голосов
/ 16 марта 2011

В какой-то момент я изменил эту ошибку:

<c:forEach items="reservations" var="reservation">

На это:

<c:forEach items="${reservations}" var="reservation">

Но моя среда IDE не сохраняла изменения в моем файле JSP, пока я не перезагрузил компьютер.После перезапуска и исправления линии у меня все было в порядке.У меня было несколько ожидающих обновлений Windows, и мне интересно, было ли это как-то связано с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...