From b4dd53e2ae4b1072c1981f9306c280d937d0630f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ma=C5=A1ek?= <24.mara@seznam.cz> Date: Mon, 2 May 2022 00:24:02 +0200 Subject: [PATCH 1/2] fixed --- pom.xml | 229 +++++++++--------- .../springweb/controller/MainController.java | 53 ++-- .../inventi/academy/springweb/model/Book.java | 6 +- .../springweb/service/BookServiceImpl.java | 9 +- .../resources/spring/application-config.xml | 14 +- src/main/webapp/WEB-INF/main-servlet.xml | 17 +- src/main/webapp/WEB-INF/view/edit.jsp | 35 ++- src/main/webapp/WEB-INF/web.xml | 11 +- 8 files changed, 223 insertions(+), 151 deletions(-) diff --git a/pom.xml b/pom.xml index e2baf47..f7f5029 100644 --- a/pom.xml +++ b/pom.xml @@ -1,119 +1,130 @@ - 4.0.0 - cz.inventi.academy - springweb - 1.0.0-SNAPSHOT - war - Basic Spring Web + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + 4.0.0 + cz.inventi.academy + springweb + 1.0.0-SNAPSHOT + war + Basic Spring Web - - - UTF-8 - 1.8 - 4.1.6.RELEASE - 4.12 + + + UTF-8 + 1.8 + 4.1.6.RELEASE + 4.12 - - 2.2 - 1.2 - 3.1.0 - 5.2.2.Final + + 2.2 + 1.2 + 3.1.0 + 6.2.3.Final - - 1.7.12 - 1.1.3 - + + 1.7.12 + 1.1.3 + - - - - org.springframework - spring-webmvc - ${spring.version} - + + + + org.springframework + spring-webmvc + ${spring.version} + - - - org.hibernate - hibernate-validator - ${hibernate.validator.version} - - - - javax.servlet - javax.servlet-api - ${servlet.version} - provided - - - javax.servlet.jsp - jsp-api - ${jsp.version} - provided - - - javax.servlet - jstl - ${jstl.version} - + + + org.hibernate + hibernate-validator + ${hibernate.validator.version} + - - - org.slf4j - slf4j-api - ${slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - + + javax.servlet + javax.servlet-api + ${servlet.version} + provided + + + javax.servlet.jsp + jsp-api + ${jsp.version} + provided + + + javax.servlet + jstl + ${jstl.version} + - - - org.springframework - spring-test - ${spring.version} - test - - - junit - junit - ${junit.version} - test - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.3 - - ${java.version} - ${java.version} - - - - org.apache.maven.plugins - maven-resources-plugin - 2.7 - - ${project.build.sourceEncoding} - - - - org.apache.maven.plugins - maven-war-plugin - 2.6 - - springweb-${project.version} - - - - + + + org.slf4j + slf4j-api + ${slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + + org.springframework + spring-test + ${spring.version} + test + + + junit + junit + ${junit.version} + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-resources-plugin + 2.7 + + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-war-plugin + 3.3.2 + + springweb-${project.version} + + + + org.codehaus.cargo + cargo-maven3-plugin + 1.9.2 + + + tomcat9x + embedded + + + + + diff --git a/src/main/java/cz/inventi/academy/springweb/controller/MainController.java b/src/main/java/cz/inventi/academy/springweb/controller/MainController.java index 78b8e4f..63d4312 100644 --- a/src/main/java/cz/inventi/academy/springweb/controller/MainController.java +++ b/src/main/java/cz/inventi/academy/springweb/controller/MainController.java @@ -1,50 +1,63 @@ package cz.inventi.academy.springweb.controller; -import java.util.Locale; - -import javax.validation.Valid; - +import cz.inventi.academy.springweb.model.Book; +import cz.inventi.academy.springweb.service.BookService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import cz.inventi.academy.springweb.model.Book; +import javax.validation.Valid; -//TODO: Write annotation for controller +import static org.springframework.context.i18n.LocaleContextHolder.getLocale; +import static org.springframework.web.bind.annotation.RequestMethod.GET; +import static org.springframework.web.bind.annotation.RequestMethod.POST; + +@Controller public class MainController { - // TODO: Define bookService and messageSource parameter and inject it via spring annotation + @Autowired + private BookService bookService; + @Autowired + private MessageSource messageSource; @RequestMapping("/") public String index() { return "index"; } - // TODO: Add @RequestMapping with correct parameters (value, method) + @RequestMapping(value = "/list", method = GET) public String list(Model model) { - // TODO: Load all books - // TODO: Add books to model + model.addAttribute("books", bookService.loadBooks()); return "list"; } - // TODO: Add @RequestMapping with correct parameters (value, method) + @RequestMapping(value = "/edit", method = GET) public String formEdit(Model model) { - // TODO: Add new book to model + model.addAttribute("book", new Book()); return "edit"; } - // TODO: Add @RequestMapping with correct parameters (value, method) - public String formSave(//TODO: Use correct types (validate input book)) { - // TODO: When there are no error, then save book and add text message ("info.book.saved") to model from resource bundle + @RequestMapping(value = "/edit", method = POST) + public String formSave(Model model, @Valid @ModelAttribute("book") Book book, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + model.addAttribute("error", bindingResult); + } else { + bookService.save(book); + model.addAttribute("info", messageSource.getMessage("info.book.saved", null, getLocale())); + } + return "edit"; } - // TODO: Add @RequestMapping with correct parameters (value, method) - public String delete(//TODO: Use correct types (e.g. PathVariable)) { - // TODO: Delete book by id - // TODO: Load all books - // TODO: Add books to model + @RequestMapping(value = "/delete/{id}", method = GET) + public String delete(Model model, @PathVariable long id) { + bookService.delete(id); + model.addAttribute("books", bookService.loadBooks()); return "redirect:/list"; } } \ No newline at end of file diff --git a/src/main/java/cz/inventi/academy/springweb/model/Book.java b/src/main/java/cz/inventi/academy/springweb/model/Book.java index 0ea30df..0439b2a 100644 --- a/src/main/java/cz/inventi/academy/springweb/model/Book.java +++ b/src/main/java/cz/inventi/academy/springweb/model/Book.java @@ -1,10 +1,10 @@ package cz.inventi.academy.springweb.model; +import org.hibernate.validator.constraints.Length; + import javax.validation.constraints.Max; import javax.validation.constraints.Min; - -import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.NotEmpty; public class Book { diff --git a/src/main/java/cz/inventi/academy/springweb/service/BookServiceImpl.java b/src/main/java/cz/inventi/academy/springweb/service/BookServiceImpl.java index 66dac69..8771b25 100644 --- a/src/main/java/cz/inventi/academy/springweb/service/BookServiceImpl.java +++ b/src/main/java/cz/inventi/academy/springweb/service/BookServiceImpl.java @@ -1,18 +1,19 @@ package cz.inventi.academy.springweb.service; +import cz.inventi.academy.springweb.model.Book; +import org.springframework.stereotype.Service; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import cz.inventi.academy.springweb.model.Book; - -//TODO: Write annotation for service +@Service public class BookServiceImpl implements BookService { private long ids; - private Map books = new HashMap<>(); + private final Map books = new HashMap<>(); @Override public List loadBooks() { diff --git a/src/main/resources/spring/application-config.xml b/src/main/resources/spring/application-config.xml index 603356c..d2063ae 100644 --- a/src/main/resources/spring/application-config.xml +++ b/src/main/resources/spring/application-config.xml @@ -1,10 +1,18 @@ + + + + + + + + - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/main-servlet.xml b/src/main/webapp/WEB-INF/main-servlet.xml index be2297b..35b496f 100644 --- a/src/main/webapp/WEB-INF/main-servlet.xml +++ b/src/main/webapp/WEB-INF/main-servlet.xml @@ -1,12 +1,19 @@ - - + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/view/edit.jsp b/src/main/webapp/WEB-INF/view/edit.jsp index 6938054..8db7b07 100644 --- a/src/main/webapp/WEB-INF/view/edit.jsp +++ b/src/main/webapp/WEB-INF/view/edit.jsp @@ -14,12 +14,35 @@

- - - - - - + + + + + + + + + + + + + + + + + + +
+ + + + + +

${info}

+
+ +
+
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 0e1ea85..c0b9ee9 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -17,7 +17,16 @@ - + + main + org.springframework.web.servlet.DispatcherServlet + 1 + + + + main + / + characterEncodingFilter From 0f05d32c8cc6eedcf3a38eebf12c2205f56accba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ma=C5=A1ek?= <24.mara@seznam.cz> Date: Mon, 2 May 2022 00:30:47 +0200 Subject: [PATCH 2/2] fixed --- .../inventi/academy/springweb/controller/MainController.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/cz/inventi/academy/springweb/controller/MainController.java b/src/main/java/cz/inventi/academy/springweb/controller/MainController.java index 63d4312..901f792 100644 --- a/src/main/java/cz/inventi/academy/springweb/controller/MainController.java +++ b/src/main/java/cz/inventi/academy/springweb/controller/MainController.java @@ -44,9 +44,7 @@ public String formEdit(Model model) { @RequestMapping(value = "/edit", method = POST) public String formSave(Model model, @Valid @ModelAttribute("book") Book book, BindingResult bindingResult) { - if (bindingResult.hasErrors()) { - model.addAttribute("error", bindingResult); - } else { + if (!bindingResult.hasErrors()) { bookService.save(book); model.addAttribute("info", messageSource.getMessage("info.book.saved", null, getLocale())); }