@Fly3110
web developer

Почему не работает обращение к модели, которая определена внутри метода?

Вот отрывок из контроллера:

public ModelAndView profilePage() {
        ...
        Map<String, Object> model = new BindingAwareModelMap();

        model.put("general", profileGeneralDTO);
        model.put("security", profileSecurityDTO);

        return new ModelAndView("profile/profile.html", "profile", model);
    }


Как можно использовать отдельные DTO в th:object?

Я могу использовать их как ${general} и ${secuity} если я меняю метод вот таким образом:

public ModelAndView profilePage(
            @AuthenticationPrincipal User user,
            Map<String, Object> model
    ) {
        ...
//        Map<String, Object> model = new BindingAwareModelMap();

        model.put("general", profileGeneralDTO);
        model.put("security", profileSecurityDTO);

        return new ModelAndView("profile/profile.html", "profile", model);
    }


В этом случае model того же класса (BindingAwareModelMap), но сейчас все работает. Почему?

Ведь если я передаю в качестве модели, например profileGeneralDTO, который так же определен в теле метода, то я нормально работаю с его полями в шаблоне.

Спасибо.
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ответы на вопрос 1
programmerjava
@programmerjava
Если ты не путаешься, то лучше оставить так как работает. Ты уверен, что в обоих случаях работает тот же метод ?
Вообще лучше пользоваться по-другому:

@RequestMapping("/subpath")
public String getRequest(Authentication auth, Model model) {
             model.put("key", object);
             model.put("key2", object2);
             return "view.html";  // path to thymeleaf template
}


Вообще могу предположить, что в первом случае у тебя спринг не делает прокси к модели, а во втором делает и почему-то начинает работать. Это надо в дебри документации идти. Проще делать так как я написал
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы