Я новичок в Spring и задаю основной вопрос, связанный с классом контроллера Spring 3 MVC.
У меня этот метод ниже в моем контроллере:
@RequestMapping("/index")
public String listContacts(Map<String, Object> map) {
map.put("contacts", new EmployeeForm());
map.put("contactList", employeeService.listEmployee());
return "contacts";
}
В JSP файле я получаю доступ к contactList
используя этот ниже код:
<c:forEach items="${contactList}" var="contact">
<tr>
<td>${contact.lastname}, ${contact.firstname} </td>
<td>${contact.email}</td>
<td>${contact.telephone}</td>
<td><a href="delete/${contact.id}">delete</a></td>
</tr>
</c:forEach>
Мое замешательство:
Я не добавил, что contactList
в contactList
session или request в моем классе контроллера, то как я могу получить доступ к тому же в JSP файле, используя ${contactList}
?
Просьба уточнить.
Аргумент Map
который у вас есть в методе обработчика контроллера, эффективно используется в качестве карты атрибутов модели.
Атрибуты модели (обычно) добавляются как атрибуты HttpServletRequest
перед визуализацией представления.
Это объясняется в документации здесь.
Ниже приведены поддерживаемые аргументы метода:
java.util.Map
/org.springframework.ui.Model
/org.springframework.ui.ModelMap
для обогащения неявной модели, которая подвергается веб-просмотру.
Spring предоставляет вам карту или в основном модель представления, которую вы можете заполнить в методе обработчика контроллера. После завершения обработчика Spring добавляет все, что вы добавили в Map, в контекст jsp, чтобы к ним можно было обращаться как к обычным переменным контекста. Я верю, что переменные добавляются в область "запрос" для доступа по JSP-коду, но я не уверен, так как это может быть область "страницы".
Поскольку обработчик и рендеринг представлений обрабатываются (управляются Spring) в том же запросе, нет необходимости хранить какую-либо информацию о модели в сеансе.
Map
, будет добавлено в качестве атрибута запроса.