JSP не отображает данные списка

У меня запущено простое приложение Spring MVC. Я могу передать строковое значение из контроллера в jsp - работает нормально.

Когда контроллеру предлагается передать данные списка, он не отображается в представлении jsp. Я проверил данные на стороне контроллера, чтобы убедиться, что они не пусты, прежде чем переходить к jsp.

Фрагменты кода ниже

@RequestMapping(method = RequestMethod.GET)
public ModelAndView printWelcome(){   

    ArrayList<String> listData = new ArrayList<String>();
    listData.add("Hello");
    listData.add("World");


    for(int i =0; i< listData.size(); i++){
        System.out.println(listData.get(i));
    }

    ModelAndView modelAndView = new ModelAndView("list");
    modelAndView.addObject("lists", listData);

    return modelAndView;                
}



<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
</head>
<body>
    <h1>Hello World!</h1>


    <ul>
        <c:forEach var="listValue" items="${listData}">
            <li>${listValue}</li>
        </c:forEach>
    </ul>


</body>

EDIT:

Проблема заключалась в моей весенней конф. (Я думаю - поскольку я все еще новичок в этом.)

Контроллер возвращал объект ModelAndView, хотя на самом деле он должен возвращать только строковое имя представления. Также рабочий контроллер имеет конструктор с параметром arg ModelView, в который необходимо дописать данные списка.`

    @RequestMapping(method = RequestMethod.GET)
public String printWelcome(ModelMap map){

    List<String> listData = new ArrayList<String>();
    listData.add("Hello");
    listData.add("World");

    map.addAttribute("lists", listData);
    //return list;
    return "list";

}

person Php Pete    schedule 02.03.2015    source источник
comment
у вас есть <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> в верхней части JSP?   -  person Evgeni Dimitrov    schedule 02.03.2015
comment
Да, я добавил это, и все еще ничего.   -  person Php Pete    schedule 02.03.2015


Ответы (2)


Попробуйте использовать, как показано ниже. Вы должны использовать ключ, который вы сохранили в модели. Он ведет себя как HashMap.

<ul>
    <c:forEach var="listValue" items="${lists}">
      <li>${listValue}</li>
    </c:forEach>
</ul>
person minion    schedule 02.03.2015
comment
Привет, миньон, этот код даст тот же результат, а именно, будет отображаться один маркер списка, за которым ничего не будет! - person Php Pete; 02.03.2015
comment
Можете ли вы показать мне, что он печатает? Что вы имеете в виду, этот код покажет тот же результат? Вы пробовали? - person minion; 02.03.2015
comment
Да, я пробовал. Я имею в виду, что печатается одна точка для первого элемента списка, а после этого ничего. Я также обновил jsp с помощью ‹%@taglib prefix=c uri=java.sun.com /jsp/jstl/core%›, хотя это приводит к тому, что маркер не выводится.. - person Php Pete; 02.03.2015
comment
Можете ли вы показать мне пример, где строковое значение работало при передаче от контроллера. Чего-то не хватает, чего я не могу найти с предоставленной информацией. Также опубликуйте конфигурацию сервлета и используете ли вы maven или что-то еще для сборки? - person minion; 02.03.2015
comment
Привет Миньон, мне удалось заставить его работать, когда я вернулся к рабочему примеру. Я добавил это в исходный пост. - person Php Pete; 02.03.2015
comment
Так это работает? Я не мог видеть пример в исходном сообщении. - person minion; 02.03.2015
comment
Это работает. Я только что добавил пример. Я думаю, что эта проблема - или, скорее, решение - может быть характерна для весны 4, хотя я не уверен. Может быть, вы могли бы просветить меня? - person Php Pete; 02.03.2015
comment
Давайте продолжим обсуждение в чате. - person minion; 02.03.2015
comment
Что ж, я думаю, что это не должно быть проблемой при отправке MAV или String. Итерация по правильному имени коллекции является ключом. Примите мой ответ, если он помог. Спасибо. - person minion; 02.03.2015

Вы должны добавить эту строку вверху:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

Затем вы можете использовать <c: в качестве префикса taglib.

person Elvin Garibzade    schedule 12.06.2020