From 79111ec8a5abe3821ea93f6bc601754f9c85bf45 Mon Sep 17 00:00:00 2001 From: saroff Date: Tue, 3 Aug 2021 19:25:32 +0300 Subject: [PATCH] 21-05 Mvc view --- .../spring-mvc-view-classwork/.gitignore | 24 ++++++++ .../spring-mvc-view-classwork/pom.xml | 17 ++++++ .../spring-mvc-view-exercise/.gitignore | 24 ++++++++ .../spring-mvc-view-exercise/pom.xml | 61 +++++++++++++++++++ .../src/main/java/ru/otus/spring/Main.java | 28 +++++++++ .../java/ru/otus/spring/domain/Person.java | 37 +++++++++++ .../spring/repostory/PersonRepository.java | 11 ++++ .../otus/spring/rest/NotFoundException.java | 7 +++ .../ru/otus/spring/rest/PersonController.java | 35 +++++++++++ .../src/main/resources/templates/edit.html | 47 ++++++++++++++ .../src/main/resources/templates/list.html | 39 ++++++++++++ .../spring-mvc-view-solution/.gitignore | 24 ++++++++ .../spring-mvc-view-solution/pom.xml | 61 +++++++++++++++++++ .../src/main/java/ru/otus/spring/Main.java | 27 ++++++++ .../java/ru/otus/spring/domain/Person.java | 37 +++++++++++ .../spring/repostory/PersonRepository.java | 11 ++++ .../otus/spring/rest/NotFoundException.java | 7 +++ .../ru/otus/spring/rest/PersonController.java | 52 ++++++++++++++++ .../src/main/resources/templates/edit.html | 47 ++++++++++++++ .../src/main/resources/templates/list.html | 39 ++++++++++++ 20 files changed, 635 insertions(+) create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/.gitignore create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/pom.xml create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/.gitignore create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/pom.xml create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/Main.java create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/domain/Person.java create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/repostory/PersonRepository.java create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/rest/NotFoundException.java create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/rest/PersonController.java create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/resources/templates/edit.html create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/resources/templates/list.html create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/.gitignore create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/pom.xml create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/Main.java create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/domain/Person.java create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/repostory/PersonRepository.java create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/rest/NotFoundException.java create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/rest/PersonController.java create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/resources/templates/edit.html create mode 100644 2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/resources/templates/list.html diff --git a/2021-05/spring-16/spring-mvc-view-classwork/.gitignore b/2021-05/spring-16/spring-mvc-view-classwork/.gitignore new file mode 100644 index 00000000..4ea52072 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/.gitignore @@ -0,0 +1,24 @@ +target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ diff --git a/2021-05/spring-16/spring-mvc-view-classwork/pom.xml b/2021-05/spring-16/spring-mvc-view-classwork/pom.xml new file mode 100644 index 00000000..9aba7ff8 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + ru.otus + spring-mvc-view-class-work + 1.0 + + pom + + + spring-mvc-view-exercise + spring-mvc-view-solution + + diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/.gitignore b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/.gitignore new file mode 100644 index 00000000..4ea52072 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/.gitignore @@ -0,0 +1,24 @@ +target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/pom.xml b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/pom.xml new file mode 100644 index 00000000..0a7c8dcc --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + ru.otus + spring-mvc-view-exercise + 1.0 + + + org.springframework.boot + spring-boot-starter-parent + 2.2.6.RELEASE + + + + 11 + 11 + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + com.h2database + h2 + + + + org.springframework.data + spring-data-jpa + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/Main.java b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..395af78d --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,28 @@ +package ru.otus.spring; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import ru.otus.spring.domain.Person; +import ru.otus.spring.repostory.PersonRepository; + +import javax.annotation.PostConstruct; + +@SpringBootApplication +public class Main { + + public static void main(String[] args) { + SpringApplication.run(Main.class); + } + + //Чтобы не усложнять пример, делать так нельзя :) + @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") + @Autowired + private PersonRepository repository; + + @PostConstruct + public void init() { + repository.save(new Person("Pushkin")); + repository.save(new Person("Lermontov")); + } +} diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/domain/Person.java b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/domain/Person.java new file mode 100644 index 00000000..374c55ac --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/domain/Person.java @@ -0,0 +1,37 @@ +package ru.otus.spring.domain; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Person { + + @Id + @GeneratedValue + private int id; + private String name; + + public Person() { + } + + public Person(String name) { + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/repostory/PersonRepository.java new file mode 100644 index 00000000..4b20e5b7 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/repostory/PersonRepository.java @@ -0,0 +1,11 @@ +package ru.otus.spring.repostory; + +import org.springframework.data.repository.CrudRepository; +import ru.otus.spring.domain.Person; + +import java.util.List; + +public interface PersonRepository extends CrudRepository { + + List findAll(); +} diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/rest/NotFoundException.java b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/rest/NotFoundException.java new file mode 100644 index 00000000..463146f3 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/rest/NotFoundException.java @@ -0,0 +1,7 @@ +package ru.otus.spring.rest; + +class NotFoundException extends RuntimeException{ + + NotFoundException() { + } +} diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/rest/PersonController.java b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/rest/PersonController.java new file mode 100644 index 00000000..06f92888 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/java/ru/otus/spring/rest/PersonController.java @@ -0,0 +1,35 @@ +package ru.otus.spring.rest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; +import ru.otus.spring.domain.Person; +import ru.otus.spring.repostory.PersonRepository; + +import java.util.List; +import java.util.stream.Collectors; + +@Controller +public class PersonController { + + private final PersonRepository repository; + + @Autowired + public PersonController(PersonRepository repository) { + this.repository = repository; + } + + @GetMapping("/") + public String listPage(Model model) { + List persons = repository.findAll(); + model.addAttribute("persons", persons); + return "list"; + } + + @GetMapping("/edit") + public String editPage(@RequestParam("id") int id, Model model) { + return null; + } +} diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/resources/templates/edit.html b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/resources/templates/edit.html new file mode 100644 index 00000000..63f74408 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/resources/templates/edit.html @@ -0,0 +1,47 @@ + + + + + Edit person + + + + + +
+

Person Info:

+ +
+ + +
+ +
+ + +
+ +
+ +
+
+ + + diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/resources/templates/list.html b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/resources/templates/list.html new file mode 100644 index 00000000..728467e5 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-exercise/src/main/resources/templates/list.html @@ -0,0 +1,39 @@ + + + + + List of all persons + + + +

Persons:

+ + + + + + + + + + + + + + + + +
IDNameAction
1John Doe + Edit +
+ + diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/.gitignore b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/.gitignore new file mode 100644 index 00000000..4ea52072 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/.gitignore @@ -0,0 +1,24 @@ +target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/pom.xml b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/pom.xml new file mode 100644 index 00000000..e47993b8 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + ru.otus + spring-mvc-view-solution + 1.0 + + + org.springframework.boot + spring-boot-starter-parent + 2.2.6.RELEASE + + + + 11 + 11 + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + com.h2database + h2 + + + + org.springframework.data + spring-data-jpa + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/Main.java b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..d33c8908 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,27 @@ +package ru.otus.spring; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import ru.otus.spring.domain.Person; +import ru.otus.spring.repostory.PersonRepository; + +import javax.annotation.PostConstruct; + +@SpringBootApplication +public class Main { + + public static void main(String[] args) { + SpringApplication.run(Main.class); + } + + @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") + @Autowired + private PersonRepository repository; + + @PostConstruct + public void init() { + repository.save(new Person("Pushkin")); + repository.save(new Person("Lermontov")); + } +} diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/domain/Person.java b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/domain/Person.java new file mode 100644 index 00000000..374c55ac --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/domain/Person.java @@ -0,0 +1,37 @@ +package ru.otus.spring.domain; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Person { + + @Id + @GeneratedValue + private int id; + private String name; + + public Person() { + } + + public Person(String name) { + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/repostory/PersonRepository.java new file mode 100644 index 00000000..4b20e5b7 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/repostory/PersonRepository.java @@ -0,0 +1,11 @@ +package ru.otus.spring.repostory; + +import org.springframework.data.repository.CrudRepository; +import ru.otus.spring.domain.Person; + +import java.util.List; + +public interface PersonRepository extends CrudRepository { + + List findAll(); +} diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/rest/NotFoundException.java b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/rest/NotFoundException.java new file mode 100644 index 00000000..463146f3 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/rest/NotFoundException.java @@ -0,0 +1,7 @@ +package ru.otus.spring.rest; + +class NotFoundException extends RuntimeException{ + + NotFoundException() { + } +} diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/rest/PersonController.java b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/rest/PersonController.java new file mode 100644 index 00000000..a52fb8b4 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/java/ru/otus/spring/rest/PersonController.java @@ -0,0 +1,52 @@ +package ru.otus.spring.rest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ExtendedModelMap; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import ru.otus.spring.domain.Person; +import ru.otus.spring.repostory.PersonRepository; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Controller +public class PersonController { + + private final PersonRepository repository; + + @Autowired + public PersonController(PersonRepository repository) { + this.repository = repository; + } + + @GetMapping("/") + public String listPage(Model model) { + List persons = repository.findAll(); + model.addAttribute("persons", persons); + return "list"; + } + + @GetMapping("/edit") + public String editPage(@RequestParam("id") int id, Model model) { + Person person = repository.findById(id).orElseThrow(NotFoundException::new); + model.addAttribute("person", person); + return "edit"; + } + + @PostMapping("/edit") + public String savePerson( + Person person, + Model model + ) { + Person saved = repository.save(person); + model.addAttribute(saved); + //Ошибка! Нужен редирект! + return "edit"; + } +} diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/resources/templates/edit.html b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/resources/templates/edit.html new file mode 100644 index 00000000..230da682 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/resources/templates/edit.html @@ -0,0 +1,47 @@ + + + + + Edit person + + + + + +
+

Person Info:

+ +
+ + +
+ +
+ + +
+ +
+ +
+
+ + + diff --git a/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/resources/templates/list.html b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/resources/templates/list.html new file mode 100644 index 00000000..c1ccf866 --- /dev/null +++ b/2021-05/spring-16/spring-mvc-view-classwork/spring-mvc-view-solution/src/main/resources/templates/list.html @@ -0,0 +1,39 @@ + + + + + List of all persons + + + +

Persons:

+ + + + + + + + + + + + + + + + +
IDNameAction
1John Doe + Edit +
+ +