티스토리 뷰

정리 노트/Spring

Spring Chapter7 [15-5]

eyoadgkn 2024. 1. 19. 10:10

스트링 폼 태그 
스트링 폼 태그
스프링 폼 태그
스프링 폼 태그 사용법

<from>  태그

<form> 안에 사용하는 태그

member.java

package com.springmvc.chap07;

import java.sql.Date;

public class member {
	
	private int id;
	private String password;
	private String city;
	private String sex;
	private String[] hobby;
	private Date birth;
	
	public member() {
		super();
		// TODO Auto-generated constructor stub
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String[] getHobby() {
		return hobby;
	}

	public void setHobby(String[] hobby) {
		this.hobby = hobby;
	}

	public Date getBirth() {
		return birth;
	}

	public void setBirth(Date birth) {
		this.birth = birth;
	}
	
	
}

Example01Controller.java

package com.springmvc.chap07;




import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class Example01Controller {

	
	@GetMapping("/member")
	public String showForm(Model model)
	{
		member member = new member();
		System.out.println("@GetMapping-----------");
		System.out.println("아이디:" + member.getId());
		System.out.println("비밀번호" + member.getPassword());
		System.out.println("거주지" + member.getCity());
		System.out.println("성별" + member.getSex());
		System.out.println("취미" + member.getHobby());
		model.addAttribute("member", member);
		return "webpage07_01";
	}
}

webpage07_01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>회원가입</h3>
	<form:form modelAttribute="member" method="post">
		<p>아이디: <form:input path="id" name="id"/>
		<p>비밀번호 : <form:password path="password"/>
		<p>거주지 : <form:select path="city" >
				<form:option value="서울시">서울시</form:option>
				<form:option value="경기도">경기도</form:option>
				<form:option value="인천시">인천시</form:option>
				<form:option value="충청도">충청도</form:option>
				<form:option value="전라도">전라도</form:option>
				<form:option value="경상도">경상도</form:option>
			</form:select>
			<p> 성별 <form:radiobutton path="sex" value="남성"/>남성
				<form:radiobutton path="sex" value="여성"/>여성
			<p> 취미 :
				독서<form:checkbox path="hobby" value="독서" />
				운동<form:checkbox path="hobby" value="운동" />
				영화<form:checkbox path="hobby" value="영화" />
			<p><input type="submit" value="가입하기"/>
				<input type="reset" value="다시쓰기" />
	</form:form>
</body>
</html>

 


스프링 폼 태그로 도서 등록 페이지 만들기

 

BookController.java

	@GetMapping("/add")
	public String requestAddBookForm(@ModelAttribute("NewBook") 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>
<link href="<c:url value="/resources/css/bootstrap.min.css"/>" rel="stylesheet">
<meta charset="UTF-8">
<title>Insert title here</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="NewBook" class="form-horizontal">
		<fieldset>
		<legend>${addTitle}</legend>
			<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:input 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>

결과


@ModelAttribute를 이용한 데이터 바인딩
요청 처리 메서드의 매개변수에 @ModelAttribute 적용
메서드에 @ModelAttribute 적용

Example02Controller.java

package com.springmvc.chap07;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;


@Controller
public class Example02Controller {

	
	@PostMapping("/member")
	public String submitForm(@ModelAttribute member member, Model model)
	{
		System.out.println("@PostMapping-----------");
		System.out.println("아이디:" + member.getId());
		System.out.println("비밀번호" + member.getPassword());
		System.out.println("거주지" + member.getCity());
		System.out.println("성별" + member.getSex());
		System.out.println("취미:" );
		for(int i = 0; i< member.getHobby().length; i++)
		{
			System.out.println("[" + member.getHobby()[i]+ "]");
		}
		
		model.addAttribute("member", member);
		return "webpage07_02";
	}
}

webpage07_02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>회원정보</h3>
	<p> 아이디 : ${member.id}
	<p> 비밀번호 : ${member.password }
	<p> 거주지 : ${member.city }
	<p> 성별 : ${member.sex }
	<p> 취미 : <c:forEach items="${member.hobby}" var="hobby">
		[<c:out value="${hobby}"/>]
		</c:forEach>
</body>
</html>

 

Example03Controller.java

package com.springmvc.chap07;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;

@Controller
public class Example03Controller {

	
	@GetMapping("/exam03")
	public String showForm()
	{
		return "webpage07_03";
	}
	
	@ModelAttribute("title")
	public String setTitle()
	{
		return "@ModelAttribute 유형";
	}
	
	@ModelAttribute
	public void setsubTitle(Model model)
	{
		model.addAttribute("subtitle", "메서드에 @ModelAttribute 애너테이션 적용하기");
	}
}

webpage07_03.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>${title }</h2>
	<h4>${subtitle }</h4>
</body>
</html>

결과-


@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 {

	List<Book> getAllBookList();
	List<Book> getBookListByCategory(String category);
	
	Set<Book> getBookListByFilter(Map<String, List<String>> filter);
	Book getBookById(String bookId);
	
	void setNewBook(Book book);
}

BookRepositoryImpl.java

	@Override
	public void setNewBook(Book book) {
		// TODO Auto-generated method stub
		listOfBooks.add(book);
		
	}

BookService.java

package com.springmvc.service;

import java.util.List;
import java.util.Map;
import java.util.Set;

import com.springmvc.domain.Book;

public interface BookService {

	List<Book> getAllBookList();
	List<Book> getBookListByCategory(String category);
	Set<Book> getBookListByFilter(Map<String, List<String>> filter);
	Book getBookById(String bookId);
	public void setNewBook(Book book);
}

BookServiceImpl.java

	@Override
	public void setNewBook(Book book) {
		// TODO Auto-generated method stub
		bookRepository.setNewBook(book);
	}

BookController.java

//	@GetMapping("/add")
//	public String requestAddBookForm(Book book)
//	{
//		return "addBook";
//	}
	
	@GetMapping("/add")
	public String requestAddBookForm(@ModelAttribute("NewBook") Book book)
	{
		return "addBook";
	}

BookController.java

	@PostMapping("/add")
	public String submitAddNewBook(@ModelAttribute("NewBook") Book book)
	{
		bookService.setNewBook(book);
		return "redirect:/books";
	}

BookController.java

	@ModelAttribute
	public void addAttributes(Model model)
	{
		model.addAttribute("addTitle", "신규 도서 등록");
	}

addBook.jsp 변경.


@InitBinder를 이용한 커스텀 데이터 바인딩
메서드에 @InitBinder 적용
폼 파라미터의 커스텀 데이터 바인딩

@InitBinder를 이용하여 커스텀 데이터 바인딩하기

BookController.java

	@InitBinder
	public void initBinder(WebDataBinder binder)
	{
		binder.setAllowedFields("bookId", "name", "unitPrice", "author",
				"decription", "publisher", "category", "unitsInStock",
				"totalPages", "releaseDate", "condition");
	}

 

'정리 노트 > Spring' 카테고리의 다른 글

Spring Chapter9~Chapter10[16-2]  (0) 2024.01.24
Spring Chapter8 [16-1]  (0) 2024.01.22
Spring Chapter5~Chapter6 [15-4]  (0) 2024.01.18
Spring Chapter4~Chapter5 [15-3]  (0) 2024.01.17
Spring Chapter3 [15-2]  (0) 2024.01.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함