Использование Model и @ModelAttribute в Spring MVC

#java #spring #jsp #spring-mvc #modelattribute

#java #весна #jsp #spring-mvc #ModelAttribute

Вопрос:

Я новичок в Spring MVC и пытаюсь преобразовать приложение Struts 2 в Spring MVC. Теперь есть так много вариантов для обработки параметров запроса и настройки данных для отображения.
Позвольте мне объяснить следующим кодом:

     @RequestMapping("/sales"
    public Class SalesController{
          @AutoWired 
          ISaleService saleService;
          ...
               ///getters and setters for service instance.omitted for brevity
          ...
          @RequestMapping("/")
          public String viewRoles(@ModelAttribute SaleBean saleBean,
          Map<String,Object> model){
             List<Sale> sales = getSaleService().getAllSales();
             model.put("sales",sales); //Option 1 to render sales on jsp form

             SaleBean saleBean = new SaleBean();
             saleBean.setSales(sales); //option 2 to render sales on jsp form
             model.put("saleBean",saleBean)   
          } 
    }
  

В приведенном выше примере я показал два варианта, которые оба работают нормально, и я могу отображать информацию о продажах в JSP.Также у меня есть имя команды как «saleBean» в моей форме.

1.Is Параметр модели, который обычно используется для размещения данных в исходящем ответе, чтобы их можно было отобразить в JSP, действительно необходим, когда я использую @ModelAttribute в качестве второго параметра?

2.Do Мне нужно явно создать экземпляр класса SaleBean в варианте 2 моего кода? Будет ли spring создавать его экземпляр, если он уже равен нулю?

3.Do Мне нужно явно ввести saleBean в модель?из документов spring кажется, что объект @Modelattribute также неявно помещается в модель.

Комментарии:

1. 1 — Я не понимаю этот вопрос; 2 — spring всегда будет создавать экземпляры @ModelAttribute компонентов и привязывать к ним параметры запроса; 3 — @ModelAttribute будет автоматически включен в атрибуты запроса

2. @PavelHoral 1 — Другими словами, всегда ли мне нужна карта модели, если у меня уже есть «@ModelAttribute» и, как вы сказали, он всегда будет помещен в ответ? если да, могу ли я использовать его в своем JSP, не помещая его в модель явно? Я оборачиваю все, что должно быть показано в JSP, в мой SaleBean

3. Если вам не нужны другие атрибуты модели, вам не нужна модель в качестве аргумента метода.

4. @PavelHoral Хорошо. итак, наконец, это означает, что если я оборачиваю все, что будет отображаться в JSP, в моем SaleBean, и я использую его в качестве своего атрибута ModelAttribute, то 1) Мне не нужно использовать Model ma в качестве другого аргумента и 2) Мне не нужно явно указывать мой аргумент salebean в model, чтобы он был в моем JSP. это будет неявно доступно правильно?

5. Да, это правильно.