티스토리 뷰
7.1.3 스프링 폼 태그로 도서 등록 페이지 만들기
BookController.java
package com.springmvc.controller;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.MatrixVariable;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.springmvc.domain.Book;
import com.springmvc.service.BookService;
@Controller
@RequestMapping("/books")
public class BookController {
@Autowired
private BookService bookService;
........
@GetMapping("/book")
public String requestBookById(@RequestParam("id") String bookId, Model model) {
Book bookById = bookService.getBookById(bookId);
model.addAttribute("book",bookById);
return "book";
}
@GetMapping("/add")
public String requestAddBookForm(Book book) {
return "addBook";
}
}
addBook.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="<c:url value="/resources/css/bootstrap.min.css"/>"rel="stylesheet" />
<title>도서 등록</title>
</head>
<body>
<nav class="navbar navbar-expand navbar-dark bg-dark">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="./home">Home</a>
</div>
</div>
</nav>
<div class="jumbotron">
<div class="container">
<h1 class="display-3">도서 등록</h1>
</div>
</div>
<div class="container">
<form:form modelAttribute="book" class="form-horizontal">
<fieldset>
<div class="form-group row">
<label class="col-sm-2 control-label">도서ID</label>
<div class="col-sm-3">
<form:input path="bookId" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">도서명</label>
<div class="col-sm-3">
<form:input path="name" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">가격</label>
<div class="col-sm-3">
<form:input path="unitPrice" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">저자</label>
<div class="col-sm-3">
<form:input path="author" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">상세정보</label>
<div class="col-sm-5">
<form:textarea path="description" cols="50" rows="2" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">출판사</label>
<div class="col-sm-3">
<form:input path="publisher" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">분야</label>
<div class="col-sm-3">
<form:input path="category" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">재고수</label>
<div class="col-sm-3">
<form:input path="unitsInStock" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">출판일</label>
<div class="col-sm-3">
<form:input path="releaseDate" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">상태</label>
<div class="col-sm-3">
<form:radiobutton path="condition" value="New" />New
<form:radiobutton path="condition" value="Old" />Old
<form:radiobutton path="condition" value="E-Book" />E-Book
</div>
</div>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" class="btn btn-primary" value="등록" />
</div>
</div>
</fieldset>
</form:form>
<hr>
<footer>
<p>© BookMarket</p>
</footer>
</div>
</body>
</html>
7.2.3 @ModelAttribute를 이용하여 새로운 도서 등록하기
BookRepository.java
package com.springmvc.repository;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.springmvc.domain.Book;
//만들어질 함수를 미리 정의하는 것
public interface BookRepository {
...
void setNewBook(Book book);
}
BookRepositoryImpl.java
package com.springmvc.repository;
import java.util.ArrayList;
...
@Repository
public class BookRepositoryImpl implements BookRepository {
private List<Book> listOfBooks = new ArrayList<Book>();
...
@Override
public void setNewBook(Book book) {
listOfBooks.add(book);
}
}
BookSerivce.java
package com.springmvc.service;
import java.util.List;
...
public interface BookService {
List<Book> getAllBookList();
List<Book> getBookListByCategory(String category);
Set<Book> getBookListByFilter(Map<String, List<String>> filter);
Book getBookById(String bookId);
void setNewBook(Book book);
}
BookServiceImpl.java
package com.springmvc.service;
import java.util.List;
...
@Service
public class BookServiceImpl implements BookService {
//autoinjection하는 것임 자동 객체 생성함
@Autowired
private BookRepository bookRepository;
...
@Override
public void setNewBook(Book book) {
bookRepository.setNewBook(book);
}
}
BookController.java
package com.springmvc.controller;
import java.util.List;
...
@Controller
@RequestMapping("/books")
public class BookController {
@Autowired
private BookService bookService;
...
@GetMapping("/add")
public String requestAddBookForm(@ModelAttribute("NewBook") Book book) {
return "addBook";
}
@PostMapping("/add")
public String submitAddNewBook(@ModelAttribute("NewBook") Book book) {
bookService.setNewBook(book);
return "redirect:/books";
}
@ModelAttribute
public void addAttributes(Model model) {
model.addAttribute("addTitle", "신규 도서 등록");
}
}
addBook.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="<c:url value="/resources/css/bootstrap.min.css"/>"rel="stylesheet" />
<title>도서 등록</title>
</head>
<body>
<nav class="navbar navbar-expand navbar-dark bg-dark">
...
</div>
<div class="container">
<form:form modelAttribute="NewBook" class="form-horizontal">
<fieldset>
<legend>${addTitle }</legend>
...
<footer>
<p>© BookMarket</p>
</footer>
</div>
</body>
</html>
7.3.3 @InitBinder를 이용하여 커스텀 데이터 바인딩하기
package com.springmvc.controller;
import java.util.List;
...
@Controller
@RequestMapping("/books")
public class BookController {
@Autowired
private BookService bookService;
...
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setAllowedFields("bookId","name","unitPrice","author","description","publisher","category","unitsInStock","totlaPages","releaseDate","condition");
}
}
'코딩 > spring' 카테고리의 다른 글
[16주 1일차] 스프링 시큐리티 (0) | 2024.01.22 |
---|---|
[15주 5일차] 스프링 폼 태그 (0) | 2024.01.19 |
[15주 4일차] 요청 처리 메서드의 파라미터 유형 (0) | 2024.01.18 |
[15주 4일차] 요청 처리 메서드의 파라미터 유형 : 다양한 조건으로 검색한 도서 목록 출력하기 (0) | 2024.01.18 |
[15주 4일차] 컨트롤러 구현 (2) (0) | 2024.01.18 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday