Java for Beginner
672 subscribers
541 photos
155 videos
12 files
827 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
ViewResolver

В Spring MVC ViewResolver — это интерфейс, который отвечает за определение того, какое представление (View) должно использоваться для возврата данных пользователю. Обычно представление — это HTML-страница или другой шаблон, с которым Spring связывает данные.

1. Что такое ViewResolver?

Когда метод контроллера возвращает имя представления в виде строки, Spring использует ViewResolver для определения фактического представления, которое должно быть отображено. Например, если контроллер возвращает строку "home", ViewResolver может преобразовать это в путь к шаблону, например, /WEB-INF/views/home.jsp.

2. Конфигурация ViewResolver

Обычно ViewResolver настраивается в конфигурации Spring (Java или XML). Наиболее распространенный вариант настройки — использование InternalResourceViewResolver.

Пример конфигурации InternalResourceViewResolver в Java:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
public class WebConfig implements WebMvcConfigurer {

@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
В этом примере, когда контроллер возвращает строку "home", InternalResourceViewResolver преобразует ее в путь /WEB-INF/views/home.jsp.


3. Возврат данных через контроллер

Методы контроллера могут возвращать имя представления и данные для этого представления с использованием модели (Model или ModelMap).


Пример:
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

@GetMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Welcome to the home page!");
return "home";
}
}
В этом примере строка "home" указывает на представление, а модель добавляет атрибут message, который можно использовать на странице.


4. Thymeleaf ViewResolver

Thymeleaf — популярный шаблонизатор, часто используемый с Spring. Он также поддерживает ViewResolver, что позволяет интегрировать шаблоны в проект.

Пример конфигурации Thymeleaf ViewResolver:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;

@Configuration
public class WebConfig {

@Bean
public ClassLoaderTemplateResolver templateResolver() {
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("templates/");
resolver.setSuffix(".html");
resolver.setTemplateMode("HTML5");
return resolver;
}

@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver());
return engine;
}

@Bean
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
return resolver;
}
}
Теперь, возвращая в контроллере строку "home", Spring преобразует ее в путь к файлу templates/home.html.


#Java #Training #Spring #ViewResolver
5. Модель и передача данных в представление

При работе с шаблонами часто необходимо передавать данные из контроллера в представление. Это можно сделать с использованием объектов Model, ModelMap или ModelAndView.

Пример:

@Controller
public class ProductController {

@GetMapping("/product")
public String product(Model model) {
model.addAttribute("name", "Laptop");
model.addAttribute("price", 1200);
return "product";
}
}
Здесь данные name и price будут доступны в шаблоне product.html.


6. ModelAndView: создание модели и представления

ModelAndView позволяет одновременно задать и представление, и данные для него, что делает его удобным для более сложных сценариев.

Пример:
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.GetMapping;

@GetMapping("/details")
public ModelAndView details() {
ModelAndView mav = new ModelAndView("details");
mav.addObject("attribute", "value");
return mav;
}
Здесь details указывает на представление, а mav.addObject добавляет данные в модель.


#Java #Training #Spring #ViewResolver