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()));
}