Въведение в използването на мащерка през пролетта

1. Въведение

Thymeleaf е Java шаблонна машина за обработка и създаване на HTML, XML, JavaScript, CSS и текст.

В тази статия ще обсъдим как да използваме Thymeleaf с Spring заедно с някои основни случаи на използване в слоя за изглед на приложението Spring MVC.

Библиотеката е изключително разширяема и нейната естествена възможност за шаблониране гарантира, че шаблоните могат да бъдат прототипирани без back-end - което прави разработката много бърза в сравнение с други популярни механизми за шаблони като JSP.

2. Интегриране на мащерка с пролетта

Първо нека видим конфигурациите, необходими за интегриране с Spring. За интеграцията е необходима библиотеката с мащерка-пролет .

Добавете следните зависимости към вашия Maven POM файл:

 org.thymeleaf thymeleaf 3.0.11.RELEASE   org.thymeleaf thymeleaf-spring5 3.0.11.RELEASE 

Имайте предвид, че за проект Spring 4 библиотеката thymeleaf-spring4 трябва да се използва вместо thymeleaf-spring5 .

Класът SpringTemplateEngine изпълнява всички стъпки за конфигуриране. Можете да конфигурирате този клас като боб в конфигурационния файл на Java:

@Bean @Description("Thymeleaf Template Resolver") public ServletContextTemplateResolver templateResolver() { ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); templateResolver.setPrefix("/WEB-INF/views/"); templateResolver.setSuffix(".html"); templateResolver.setTemplateMode("HTML5"); return templateResolver; } @Bean @Description("Thymeleaf Template Engine") public SpringTemplateEngine templateEngine() { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver()); templateEngine.setTemplateEngineMessageSource(messageSource()); return templateEngine; }

На templateResolver свойства бобови префикс и наставка показват местоположението на страниците на преглед в рамките на уеб приложение директория и тяхното разширение за име, съответно.

Интерфейсът ViewResolver в Spring MVC картографира имената на изгледи, върнати от контролера, към действителни обекти на изглед. ThymeleafViewResolver реализира интерфейса ViewResolver и се използва за определяне кои изгледи на Thymeleaf да се изобразят, като им се даде име на изглед.

Последната стъпка в интеграцията е да добавите ThymeleafViewResolver като боб:

@Bean @Description("Thymeleaf View Resolver") public ThymeleafViewResolver viewResolver() { ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(templateEngine()); viewResolver.setOrder(1); return viewResolver; }

3. Мащерка в пролетно зареждане

Spring Boot осигурява автоматична конфигурация за Thymeleaf чрез добавяне на зависимостта spring-boot-starter-thymeleaf :

 org.springframework.boot spring-boot-starter-thymeleaf 2.3.3.RELEASE  

Не е необходима изрична конфигурация. По подразбиране HTML файловете трябва да бъдат поставени в местоположението на ресурси / шаблони .

4. Показване на стойности от източника на съобщения (файлове с свойства)

Най -ти: текст = "# {} ключ" таг атрибут може да се използва за стойностите на дисплея от файлове собственост. За да работи това, файлът с свойства трябва да бъде конфигуриран като bean messageSource :

@Bean @Description("Spring Message Resolver") public ResourceBundleMessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasename("messages"); return messageSource; }

Ето кода на Thymeleaf за показване на стойността, свързана с ключа welcome.message :

5. Показване на атрибути на модели

5.1. Прости атрибути

Най -ти: текст = "$ {} ИмеНаАтрибут" таг атрибут може да се използва за показване на стойността на атрибути на модела. Нека добавим атрибут на модел с името serverTime в класа на контролера:

model.addAttribute("serverTime", dateFormat.format(new Date()));

HTML кодът за показване на стойността на атрибута serverTime :

Current time is 

5.2. Атрибути на колекцията

Ако атрибутът на модел е колекция от обекти, атрибутът th: всеки таг може да се използва за итерация върху него. Нека дефинираме клас на студентски модел с две полета, id и name :

public class Student implements Serializable { private Integer id; private String name; // standard getters and setters }

Сега ще добавим списък на учениците като атрибут на модел в класа на контролера:

List students = new ArrayList(); // logic to build student data model.addAttribute("students", students);

И накрая, можем да използваме кода на шаблона на Thymeleaf, за да прегледаме списъка със студенти и да покажем всички стойности на полетата:

6. Условна оценка

6.1. ако и освен ако

Най -ти: ако = "$ {състояние}" атрибут се използва за показване на разрез на изгледа, ако условието е изпълнено. Най -ти: освен = "$ {състояние}" атрибут се използва за показване на разрез на изгледа, ако условието не е изпълнено.

Добавете поле за пол към студентския модел:

public class Student implements Serializable { private Integer id; private String name; private Character gender; // standard getters and setters }

Да предположим, че това поле има две възможни стойности (M или F), за да посочи пола на ученика. Ако искаме да покажем думите „мъжки“ или „женски“ вместо единичния знак, можем да постигнем това, като използваме следния код на Thymeleaf:

6.2. превключвател и кутия

Най- ия: Превключване и ти: случай атрибути се използват за съдържание дисплей условно, използвайки структурата на изявление ключ.

Предишният код може да бъде пренаписан с помощта на атрибутите th: switch и th: case :

7. Работа с потребителски вход

Form input can be handled using the th:action=”@{url}” and th:object=”${object}” attributes. The th:action is used to provide the form action URL and th:object is used to specify an object to which the submitted form data will be bound. Individual fields are mapped using the th:field=”*{name}” attribute, where the name is the matching property of the object.

For the Student class, we can create an input form:


    

In the above code, /saveStudent is the form action URL and a student is the object that holds the form data submitted.

The StudentController class handles the form submission:

@Controller public class StudentController { @RequestMapping(value = "/saveStudent", method = RequestMethod.POST) public String saveStudent(@ModelAttribute Student student, BindingResult errors, Model model) { // logic to process input data } }

In the code above, the @RequestMapping annotation maps the controller method with URL provided in the form. The annotated method saveStudent() performs the required processing for the submitted form. The @ModelAttribute annotation binds the form fields to the student object.

8. Displaying Validation Errors

The #fields.hasErrors() function can be used to check if a field has any validation errors. The #fields.errors() function can be used to display errors for a particular field. The field name is the input parameter for both these functions.

HTML code to iterate and display the errors for each of the fields in the form:


    

Instead of field name the above functions accept the wild card character * or the constant all to indicate all fields. The th:each attribute is used to iterate the multiple errors that may be present for each of the fields.

The previous HTML code re-written using the wildcard *:


    

or using the constant all:


    

Similarly, global errors in Spring can be displayed using the global constant.

The HTML code to display global errors:


    

The th:errors attribute can also be used to display error messages. The previous code to display errors in the form can be re-written using th:errors attribute:


    

9. Using Conversions

The double bracket syntax {{}} is used to format data for display. This makes use of the formatters configured for that type of field in the conversionService bean of the context file.

The name field in the Student class is formatted:

The above code uses the NameFormatter class, configured by overriding the addFormatters() method from the WebMvcConfigurer interface. For this purpose, our @Configuration class overrides the WebMvcConfigurerAdapter class:

@Configuration public class WebMVCConfig extends WebMvcConfigurerAdapter { // ... @Override @Description("Custom Conversion Service") public void addFormatters(FormatterRegistry registry) { registry.addFormatter(new NameFormatter()); } }

The NameFormatter class implements the Spring Formatter interface.

В #conversions помощната програма може да се използва за преобразуване на обекти за показване. Синтаксисът на полезната функция е # convertions.convert (Object, Class), където Object се преобразува в тип Class .

За да се покаже процентното поле на студентски обект с премахната частична част:

10. Заключение

В този урок видяхме как да интегрираме и използваме Thymeleaf в Spring MVC приложение.

Виждали сме и примери за това как да показваме полета, да приемаме въвеждане, да показваме грешки при проверка и да преобразуваме данни за показване. Работещата версия на кода, показана в тази статия, е достъпна в хранилището на GitHub.