Вы можете сделать это несколькими способами, но, возможно, самый простой способ будет использовать карту
Map<String, Object> model = new HashMap<String, Object>();
model.put("bean", bean);
model.put("userdetails", userdetails);
//and so on
return new ModelAndView("welcomePage", "model", model);
Тогда на вашей странице вам просто нужно добавить дополнительный уровень при доступе к ней
User's name is ${ model.userdetails.username }
в качестве альтернативы, вы также можете изменить свою подпись обработчика на что-то вроде этого
public String handleRequest(Model model){
//arbitrary handling code
model.addAttribute("bean", bean);
model.addAttribute("userdetails", userdetails);
//etc
return "welcomePage";
}
Когда вы делаете это так, вам на самом деле не нужно возвращать модель, потому чтоSpring удерживает ссылку до того, как вы ее получите, а затем может получить к ней доступ.Лично я нахожу этот метод немного лучше, потому что он облегчает модульное тестирование.Все, что вам нужно сделать, это проверить возвращаемое строковое значение и использовать макет Spring (или ваш собственный фиктивный объект, который реализует интерфейс Model
).
Редактировать Чтобы обратиться к комментариям:
Этот источник приводит несколько примеров и обсуждает некоторые из поддерживаемых сигнатур поддерживаемых методов.В частности, обратитесь к разделу 15.3.2.3 для обсуждения параметров, которые могут быть переданы в методы-обработчики.
В основном Spring использует аннотации @RequestMapping
, чтобы определить, какие методы следует вызывать на основе данного запроса.Затем Spring может проверить сигнатуру метода и сгенерировать соответствующие параметры перед вызовом метода.В случае, когда вы возвращаете объект ModelAndView
, Model
создается при вызове конструктора на основе предоставленных вами параметров.Если вы не предоставите никаких объектов модели, то будет создана пустая модель.Однако когда вы указываете, что должны получать модель в качестве параметра для вашего метода-обработчика, Spring создает для вас экземпляр объекта Model
и передает его в ваш метод.Spring сохраняет ссылку на эту модель и, когда ваш метод возвращается, передает эту модель в веб-представление (например, анализатор JSP).
На самом деле это то же самое, что возвращать объект ModelAndView
, за исключением того, что он делает модульное тестирование намного проще и откровеннее, IMO обеспечивает более чистую и элегантную реализацию.
Примечание: имейте в виду, что Model
на самом деле является просто специальным Map
объектом (следовательно, почему Spring поддерживает взаимозаменяемое использование Model
или Map
в сигнатурах метода).Есть несколько дополнительных методов, и он также поддерживает неявное именование атрибутов.Например, если вам нужно было просто передать объект без указания имени, объект Model
выяснит, как назвать объект в зависимости от типа объекта и т. Д. Однако, если вы всегда предоставляете «ключ» для объектаВы добавляете в модель, она ведет себя точно так же, как Map
.