Почему я не могу получить доступ к модели, если я инициализирую ее внутри метода? - PullRequest
0 голосов
/ 03 февраля 2020

часть ProfileController. java:

    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);
    }

как я могу получить доступ к general и security объектам в директиве th:object для шаблона тимелист?

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

    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, но он работает ... почему?

1 Ответ

1 голос
/ 04 февраля 2020

Оба примера кода на самом деле используют неправильный конструктор для ModelAndView. Вы используете конструктор для добавления одного элемента в модель. Таким образом, вы фактически добавляете Map, который хотите использовать в качестве модели, в качестве элемента модели.

Использование ${profile.general} будет работать в ваших представлениях.

Однако вы должны использовать конструктор с 2 аргументами (имя вида и карту или модель).

Поэтому вместо new ModelAndView("profile/profile.html", "profile", model) используйте new ModelAndView("profile/profile.html", model).

ПРИМЕЧАНИЕ: Второй пример работает из-за того, что вы добавляете вещи в неявную модель и снова добавляете эту модель в качестве карты в модель. Так что в этой ситуации будут работать ${profile.general} и ${general}.

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