Spring_FormTag

인삼주·2023년 8월 29일
0

spring

목록 보기
10/22
package kr.or.ddit.controller;

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

import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
@RequestMapping("/formtag")
public class JSPFormTagController {

	/*
	 * 	8장 스프링 폼 태그
	 * 	
	 * 	1. 스프링 폼 태그 라이브러리
	 * 	- 스프링 폼은 HTML 폼을 표시하기 위한 태그 라이브러리입니다.
	 * 	    스프링 폼을 이용하면 HTML 폼과 자바 객체를 쉽게 바인딩할 수 있습니다.
	 * 
	 * 		클라이언트	 -------- 	서버
	 * 		form태그			데이터(java)
	 * 
	 * 		우리가 앞으로 배울 JSP Form 태그는 클라이언트와 서버간의 순환체계가 연결되어 있어야함을 꼭 잊지말자!
	 * 		순환체계란 form 태그 내 modelAttribute 속성을 기반으로 서버에서 제공하는 데이터의 타입이 일치됨을 의미한다.
	 * 		클라이언트에서 form태그 내에서 활용하고 있는 여러 자원들이 예로 Member 자바빈즈 클래스 객체에서 사용되는 필드들이라고 가정하자.
	 * 		그렇다면 서버내에서도 Member에 해당하는 자바빈즈 클래스 객체를 클라이언트로 전달해줄 수 있는 로직이 추가 되어 있어야 한다.
	 * 		이 과정이 처리되어 있지 않으면 순환체계가 연결되어 있지 않아 에러를 뿜어내게 된다.
	 * 
	 * 		form 태그는 꼭 활용해야한다는 법은 없다.
	 * 		form 태그를 활용하면 form 태그와 form 태그 내에서 사용 가능한 input 요소들의 태그들을 쉽게 빠르게 만들 수 있다는 장점이 있기 때문이지
	 * 		꼭 활용하여 사용해야한다는 건 없다. 단지 이런 방법도 있다인것 뿐!
	 * 
	 * 		# 스프링 폼 커스텀 태그 목록
	 * 		
	 * 		<form:form>
	 * 		- 폼 요소를 생성한다.
	 * 		
	 * 		<form:input>
	 * 		- 텍스트 필드 요소를 생성한다.
	 * 			
	 * 		<form:password>
	 * 		- 패스워드 필드 요소를 생성한다.
	 * 
	 * 		<form:textarea>
	 * 		- 텍스트 영역 요소를 생성한다.
	 * 
	 * 		<form:checkboxes>
	 * 		- 여러 개의 체크박스 요소를 생성한다.
	 * 
	 * 		<form:checkbox>
	 * 		- 체크박스 요소를 생성한다.
	 * 
	 * 		<form:radiobuttons>
	 * 		- 여러 개의 라디오 버튼 요소를 생성한다.
	 * 
	 * 		<form:radiobutton>
	 * 		- 라디오 버튼  요소를 생성한다.
	 * 
	 * 		<form:select>
	 * 		- 셀렉트 박스 요소를 생성한다.
	 * 
	 * 		<form:hidden>
	 * 		- 숨겨진 필드 요소를 생성한다.
	 * 
	 * 		<form:label>
	 * 		- 라벨 요소를 생성한다.
	 * 
	 * 		<form:button>
	 * 		- 버튼 요소를 생성한다.
	 * 		
	 * 		<form:errors>
	 * 		- 입력값 검증 오류를 표시한다.
	 * 
	 * 		스프링 폼 태그 라이브러리 선언
	 * 		<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
	 * 		
	 * 	2. 폼 요소
	 * 	- HTML 폼을 출력하려면 <form:form> 요소를 사용한다.
	 * 		
	 * 		***	 JSP에서 form:form 태그를 선언하고 modelAttribute의 속성을 설정 후 서버 컨트롤러 메소드의 model이라는 데이터 전달자를 통해서
	 * 				전달되어지는 데이터가 modelAttribute 속성에 설정된 값과 일치하지 않는 경우 순환체계의 연결이 부적절하므로 에러가 발생
	 * 				하지만, 일치하는 경우 순환체계의 연결이 정상이므로 에러가 발생하지 않는다.
	 * 
	 * 	3. 폼 항목의 공통 속성
	 * 	- HTML 폼 항목을 출력하기 위한 태그 라이브러리에는 몇 가지 공통 속성이 있다.
	 * 		
	 * 		path
	 * 		- 폼 항목에 바인딩되는 폼 객체의 프로퍼티를 저장한다.
	 * 
	 * 		disable
	 * 		- 폼 항목을 비활성화할지 여부를 지정한다. (기본값은 false)
	 * 
	 * 		readonly
	 * 		- 폼 항목을 읽기 전용으로 만들지 여부를 지정한다. (기본값은 false)
	 */
	
	
	@RequestMapping(value="/registerForm01", method = RequestMethod.GET)
	public String registerForm01(Model model) {
		log.info("registerForm01() 실행...!");
		model.addAttribute("member", new Member());
		return "home/formtag/registerForm01";
	}
	
	// 2) 폼 객체의 속성명과 스프링 폼 태그의 modelAttribute 속성값이 일치하지 않으면 에러가 발생한다.
	@RequestMapping(value="/registerForm02", method = RequestMethod.GET)
	public String registerForm02(Model model) {
		log.info("registerForm02() 실행...!");
		model.addAttribute("user", new Member());
		return "home/formtag/registerForm01";
	}
	
	// 3) 컨트롤러 메서드의 매개변수로 자바빈즈 객체가 전달이 되면 기본적으로 다시 화면으로 전달된다.
	@RequestMapping(value="/registerForm03", method= RequestMethod.GET)
	public String registerForm03(Member member) {
		log.info("registerForm03() 실행...!");
		return "home/formtag/registerForm01";
	}
	
	// 4) @ModelAttribute 어노테이션으로 폼 객체의 속성명을 직접 지정할 수 있다.
	// member을 user라는 이름으로
	@RequestMapping(value="/registerForm04", method=  RequestMethod.GET)
	public String registerForm04(@ModelAttribute("user") Member member) {
		log.info("registerForm04() 실행...!");
		return "home/formtag/registerForm01";
	}
	
	// 폼 객체의 프로퍼티에 값을 지정하여 모델을 통하여 전달한다.
	@RequestMapping(value="/registerForm05", method = RequestMethod.GET)
	public String registerForm05(Model model) {
		log.info("registerForm05() 실행...!");
		
		Member member = new Member();
		member.setUserId("hongkildong");
		member.setUserName("홍길순");
		
		model.addAttribute("user",member);
		return "home/formtag/registerForm01";
	}
	
	// 결과 페이지
	@RequestMapping(value="/register", method = RequestMethod.POST)
	public String register(Member member, Model model) {
		log.info("register() 실행...!");
		log.info("userId : " + member.getUserId());
		log.info("userName : " + member.getUserName());
	
		model.addAttribute("member", member);
		return "home/formtag/result";
	}

}















0개의 댓글