티스토리 뷰

 

 

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>&copy; 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>&copy; 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");
	}

}

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday