반응형

 

스프링 폼 태그 라이브러리

 

 

스프링 폼 : HTML 폼을 표시하기 위한 태그 라이브러리

스프링 폼을 이용하면 HTML 폼과 자바 객체를 쉽게 바인딩할 수 있음

 

사용하기 위해선 아래와 같은 taglib 설정을 추가해야 함

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

 

 

 

폼 요소 : 화면(뷰,jsp)에 전달할 데이터를 위해 모델을 매개변수로 지정

 

 

<form:form>

 

form:form 사용 시 주의할 점 : form:form 태그의 modelAttribute의 이름과 컨트롤러에서 집어 넣는 이름이 같아야 함 + 컨트롤러에서 매개변수 지정 필수

 

 

  • input
<input type="text" name="userId" id="userId" placeholder="아이디"/>

<!-- 위와 아래 코드는 같은 코드임 -->

<form:input path="userId" placeholder="아이디" />

 

 

 

  • button
<!-- 세 개의 코드는 같은 코드임 -->
<input type="submit" value="등록" />

<button type="submit">등록</button>

<form:button name="register">등록</form:button>

 

 

 

예시

 

 

  • 매개변수에 model 넣음

MemberController.java

package kr.or.ddit.controller;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import kr.or.ddit.service.MemberService;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Card;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class MemberController {
	
	// DI(의존성 주입) / IoC(제어의 역전)
	@Autowired
	MemberService memberService;
	
	//스프링 폼
	//2. 폼 요소
	//화면(뷰,jsp)에 전달할 데이터를 위해 모델을 매개변수로 지정함
	@GetMapping("/registerForm01")
	public String registerForm01(Model model) {
		
		//<form:form modelAttribute="member"
		model.addAttribute("member", new Member());
		
		// /views/registerForm01.jsp 포워딩
		return "registerForm01";
	}
}

 

 

registerForm01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<h2>Spring Form</h2>
<!-- modelAttribute 속성에 폼 객체의 속성명을 지정함 -->
<form:form modelAttribute="member" method="post" action="/registerForm01Post">
	<p>유저ID : 
		<!-- <input type="text" name="userId" id="userId" placeholder="아이디"/> -->
		<!-- 위와 아래 코드는 같은 코드임 -->
		<form:input path="userId" placeholder="아이디" />
	</p>
	<p>이름 : 
		<input type="text" name="userName" id="userName" placeholder="이름" />
	</p>
	<p>
		<!-- 세 개의 코드는 같은 코드임 -->
		<!-- <input type="submit" value="등록" /> -->
		<!-- <button type="submit">등록</button> -->
		<form:button name="register">등록</form:button>
	</p>
</form:form>

 

결과 화면1

 

 

 

  • 매개변수에 자바빈즈 객체를 넣음

바로 위의 방법과 달리 이와 같이 작업할 수 있음

 

컨트롤러의 이름과 modelAttribute의 이름이 같아야함(첫 글자는 소문자여야 함)

 

 

MemberController.java

package kr.or.ddit.controller;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import kr.or.ddit.service.MemberService;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Card;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class MemberController {
	
	// DI(의존성 주입) / IoC(제어의 역전)
	@Autowired
	MemberService memberService;
	
	//컨트롤러 메서드의 매개변수로 자바빈즈 객체가 전달이 되면 기본적으로 다시 화면으로 전달
	//컨트롤러는 기본적으로 자바빈즈 규칙에 맞는 객체는 다시 화면으로 폼 객체를 전달함
	@GetMapping("/registerForm05")
	public String registerForm05(Member member) {

//		model.addAttribute("member", new Member());
		
		//forwarding
		return "registerForm05";
	}
}

 

 

registerForm01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<h2>Spring Form</h2>
<!-- modelAttribute 속성에 폼 객체의 속성명을 지정함 -->
<form:form modelAttribute="member" method="post" action="/registerForm01Post">
	<p>유저ID : 
		<!-- <input type="text" name="userId" id="userId" placeholder="아이디"/> -->
		<!-- 위와 아래 코드는 같은 코드임 -->
		<form:input path="userId" placeholder="아이디" />
	</p>
	<p>이름 : 
		<input type="text" name="userName" id="userName" placeholder="이름" />
	</p>
	<p>
		<!-- 세 개의 코드는 같은 코드임 -->
		<!-- <input type="submit" value="등록" /> -->
		<!-- <button type="submit">등록</button> -->
		<form:button name="register">등록</form:button>
	</p>
</form:form>

 

결과 화면2

 

 

 

=> 컨트롤러의 이름과 modelAttribute의 이름이 다를 때 : 속성명 지정

 

MemberController.java

package kr.or.ddit.controller;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import kr.or.ddit.service.MemberService;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Card;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class MemberController {
	
	// DI(의존성 주입) / IoC(제어의 역전)
	@Autowired
	MemberService memberService;
	
	//1) 컨트롤러 메서드의 매개변수로 자바빈즈 객체가 전달이 되면 기본적으로 다시 화면으로 전달
	//컨트롤러는 기본적으로 자바빈즈 규칙에 맞는 객체는 다시 화면으로 폼 객체를 전달함
	//2) 폼 객체의 속성명은 직접 지정하지 않으면 폼 객체의 클래스명의 맨처음 문자를 소문자로 변환하여 처리함
	//3) ModelAttribute 애너테이션으로 폼 객체의 속성명을 직접 지정할 수 있음
	@GetMapping("/registerForm05")
	public String registerForm05(@ModelAttribute("user") Member member) {

//		model.addAttribute("member", new Member());
		
		//forwarding
		return "registerForm05";
	}
}

 

 

registerForm01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<h2>Spring Form</h2>
<!-- modelAttribute 속성에 폼 객체의 속성명을 지정함 -->
<form:form modelAttribute="user" method="post" action="/registerForm01Post">
	<p>유저ID : 
		<!-- <input type="text" name="userId" id="userId" placeholder="아이디"/> -->
		<!-- 위와 아래 코드는 같은 코드임 -->
		<form:input path="userId" placeholder="아이디" />
	</p>
	<p>이름 : 
		<input type="text" name="userName" id="userName" placeholder="이름" />
	</p>
	<p>
		<!-- 세 개의 코드는 같은 코드임 -->
		<!-- <input type="submit" value="등록" /> -->
		<!-- <button type="submit">등록</button> -->
		<form:button name="register">등록</form:button>
	</p>
</form:form>

 

결과 화면3

 

 

 

  • input과 form:input 비교하여 값 가져오기 (방법)

 

form:input 을 사용할때는 path가 같아야 하고, input을 사용할때는 value에 넣어야 값을 받아올 수 있음

 

MemberController.java

package kr.or.ddit.controller;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import kr.or.ddit.service.MemberService;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Card;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class MemberController {
	
	// DI(의존성 주입) / IoC(제어의 역전)
	@Autowired
	MemberService memberService;
	
	//1) 컨트롤러 메서드의 매개변수로 자바빈즈 객체가 전달이 되면 기본적으로 다시 화면으로 전달
	//컨트롤러는 기본적으로 자바빈즈 규칙에 맞는 객체는 다시 화면으로 폼 객체를 전달함
	//2) 폼 객체의 속성명은 직접 지정하지 않으면 폼 객체의 클래스명의 맨처음 문자를 소문자로 변환하여 처리함
	//3) ModelAttribute 애너테이션으로 폼 객체의 속성명을 직접 지정할 수 있음
	@GetMapping("/registerForm05")
	public String registerForm05(@ModelAttribute("user") Member member) {

//		model.addAttribute("member", new Member());
		
		//폼 객체의 프로퍼티에 값을 지정
		member.setUserId("gaeddongi");
		member.setUserName("개똥이");
        
		//forwarding
		return "registerForm05";
	}
}

 

 

registerForm01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<h2>Spring Form</h2>
<!-- modelAttribute 속성에 폼 객체의 속성명을 지정함 -->
<form:form modelAttribute="user" method="post" action="/registerForm01Post">
	<p>유저ID : 
		<input type="text" name="userId" id="userId" value="${user.userId}"placeholder="아이디"/>
		<!-- 위와 아래 코드는 같은 코드임 -->
		<form:input path="userId" disabled="true" readonly="true" placeholder="아이디" />
	</p>
	<p>이름 : 
		<input type="text" name="userName" id="userName" placeholder="이름" />
	</p>
	<p>
		<!-- 세 개의 코드는 같은 코드임 -->
		<!-- <input type="submit" value="등록" /> -->
		<!-- <button type="submit">등록</button> -->
		<form:button name="register">등록</form:button>
	</p>
</form:form>

 

결과 화면4

 

+readonly와 disabled의 차이

  disabled readonly
공통점 읽기 기능만 가능
차이점 submit 시 값이 넘어가지 않음 submit 시 값이 넘어감

 

 

 

  • input과 form:input 비교하여 값 가져오기 (확인)

 

Member.java

package kr.or.ddit.vo;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.multipart.MultipartFile;

import lombok.Data;

//POJO가 약해짐
@Data
public class Member {
	private String userId;
	private String userName = "hongkd";
	private String password = "1234";
	@DateTimeFormat(pattern="yyyy-MM-dd") private Date regDate;
	private int coin;
	private String gender;
	private String email;
	private String birthDay;
	private String nationality;
	private String cars;
	private String[] carArray;
	private ArrayList<String> carList;
	private String hobby;
	private String[] hobbyArray;
	private ArrayList<String> hobbyList;
	private String developer;
	private boolean foreigner;
	private String introduction;
	private Date dateOfBirth;
	
	// 중첩된(nested) 자바빈즈
	// MEMBER : ADDRESS = 1 : 1
	private Address address;
	
	// MEMBER : CARD = 1 : N
	private List<Card> cardList;
	
	//스프링프레임워크에서 제공하는 MultipartFile 파일객체타입
	private MultipartFile picture;
	
	//<input type="file" name="pictures" multiple>
	// 위의 input과 name 값이 변수명과 같아야 함
	private MultipartFile[] pictures;
}

 

 

MemberController.java

package kr.or.ddit.controller;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import kr.or.ddit.service.MemberService;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Card;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class MemberController {
	
	// DI(의존성 주입) / IoC(제어의 역전)
	@Autowired
	MemberService memberService;
	
	//1) 컨트롤러 메서드의 매개변수로 자바빈즈 객체가 전달이 되면 기본적으로 다시 화면으로 전달
	//컨트롤러는 기본적으로 자바빈즈 규칙에 맞는 객체는 다시 화면으로 폼 객체를 전달함
	//2) 폼 객체의 속성명은 직접 지정하지 않으면 폼 객체의 클래스명의 맨처음 문자를 소문자로 변환하여 처리함
	//3) ModelAttribute 애너테이션으로 폼 객체의 속성명을 직접 지정할 수 있음
	@GetMapping("/registerForm05")
	public String registerForm05(@ModelAttribute("user") Member member) {

//		model.addAttribute("member", new Member());
		
		//폼 객체의 프로퍼티에 값을 지정
		member.setUserId("gaeddongi");
		member.setUserName("개똥이");
		
		//forwarding
		return "registerForm05";
	}
}

 

 

registerForm05.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<h2>Spring Form</h2>
<!-- modelAttribute 속성에 폼 객체의 속성명을 지정함 -->
<form:form modelAttribute="user" method="post" action="/registerForm01Post">
	<p>유저ID : 
		<input type="text" name="userId" id="userId" value="${user.userId}"placeholder="아이디"/>
		<!-- 위와 아래 코드는 같은 코드임 -->
		<form:input path="userId" disabled="true" readonly="true" placeholder="아이디" />
	</p>
	<p>이름 : 
		<input type="text" name="userName" id="userName" placeholder="이름" />
	</p>
	<p>패스워드 : 
		<input type="password" name="password" id="password"/>
		<!-- 값을 설정해서 뷰에 전달하더라도 패스워드 필드에 반영 안 됨 -->
		<form:input path="password" /> <!-- 바인딩되어서 값이 들어옴 -->
	</p>
	<p>
		<!-- 세 개의 코드는 같은 코드임 -->
		<!-- <input type="submit" value="등록" /> -->
		<!-- <button type="submit">등록</button> -->
		<form:button name="register">등록</form:button>
	</p>
</form:form>

 

결과 화면5

 

 

 

  • form:textarea 사용

 

MemberController.java

package kr.or.ddit.controller;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import kr.or.ddit.service.MemberService;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Card;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class MemberController {
	
	// DI(의존성 주입) / IoC(제어의 역전)
	@Autowired
	MemberService memberService;
	
	//1) 컨트롤러 메서드의 매개변수로 자바빈즈 객체가 전달이 되면 기본적으로 다시 화면으로 전달
	//컨트롤러는 기본적으로 자바빈즈 규칙에 맞는 객체는 다시 화면으로 폼 객체를 전달함
	//2) 폼 객체의 속성명은 직접 지정하지 않으면 폼 객체의 클래스명의 맨처음 문자를 소문자로 변환하여 처리함
	//3) ModelAttribute 애너테이션으로 폼 객체의 속성명을 직접 지정할 수 있음
	@GetMapping("/registerForm05")
	public String registerForm05(@ModelAttribute("user") Member member) {

//		model.addAttribute("member", new Member());
		
		//폼 객체의 프로퍼티에 값을 지정
		member.setUserId("gaeddongi");
		member.setUserName("개똥이");
		member.setPassword("java");
		member.setIntroduction("저는 개똥이 입니다.\n왜일까요?");
		
		//forwarding
		return "registerForm05";
	}
}

 

 

registerForm05.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<h2>Spring Form</h2>
<!-- modelAttribute 속성에 폼 객체의 속성명을 지정함 -->
<form:form modelAttribute="user" method="post" action="/registerForm01Post">
	<p>유저ID : 
		<input type="text" name="userId" id="userId" value="${user.userId}"placeholder="아이디"/>
		<!-- 위와 아래 코드는 같은 코드임 -->
		<form:input path="userId" disabled="true" readonly="true" placeholder="아이디" />
	</p>
	<p>이름 : 
		<input type="text" name="userName" id="userName" placeholder="이름" />
	</p>
	<p>패스워드 : 
		<input type="password" name="password" id="password"/>
		<!-- 값을 설정해서 뷰에 전달하더라도 패스워드 필드에 반영 안 됨 -->
		<form:input path="password" /> <!-- 바인딩되어서 값이 들어옴 -->
	</p>
	<p>소개글 :
		<form:textarea path="introduction" rows="6" cols="30"/> 
	</p>
	<p>
		<!-- 세 개의 코드는 같은 코드임 -->
		<!-- <input type="submit" value="등록" /> -->
		<!-- <button type="submit">등록</button> -->
		<form:button name="register">등록</form:button>
	</p>
</form:form>

 

결과 화면6

 

 

 

  • form:checkboxes 사용

 

Member.java

하단의 ArrayList를 사용함

//스프링폼에서 checkboxes의 path로 사용
private ArrayList<String> carList;
//스프링폼에서 checkboxes의 item으로 사용
private Map<String, String> carMap;

//스프링폼에서 checkboxes의 path으로 사용
private ArrayList<String> hobbyList;
//스프링폼에서 checkboxes의 item으로 사용
private Map<String,String> hobbyMap;

 

 

MemberController.java

package kr.or.ddit.controller;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import kr.or.ddit.service.MemberService;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Card;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class MemberController {
	
	// DI(의존성 주입) / IoC(제어의 역전)
	@Autowired
	MemberService memberService;
	
	//1) 컨트롤러 메서드의 매개변수로 자바빈즈 객체가 전달이 되면 기본적으로 다시 화면으로 전달
	//컨트롤러는 기본적으로 자바빈즈 규칙에 맞는 객체는 다시 화면으로 폼 객체를 전달함
	//2) 폼 객체의 속성명은 직접 지정하지 않으면 폼 객체의 클래스명의 맨처음 문자를 소문자로 변환하여 처리함
	//3) ModelAttribute 애너테이션으로 폼 객체의 속성명을 직접 지정할 수 있음
	@GetMapping("/registerForm05")
	public String registerForm05(@ModelAttribute("user") Member member) {

//		model.addAttribute("member", new Member());
		
		//폼 객체의 프로퍼티에 값을 지정
		member.setUserId("gaeddongi");
		member.setUserName("개똥이");
		member.setPassword("java");
		member.setIntroduction("저는 개똥이 입니다.\n왜일까요?");
		
		//모델에  Map 타입의 데이터를 생성하여 추가한 후에 화면에 전달
		Map<String, String> hobbyMap = new HashMap<String, String>();
		hobbyMap.put("kmj", "Music");
		hobbyMap.put("ksy", "FootBall");
		hobbyMap.put("esb", "showping");

		member.setHobbyMap(hobbyMap);
		
		//보유자동차
		Map<String,String> carMap = new HashMap<String, String>();
		carMap.put("qm5", "qm5");
		carMap.put("sm6", "sm6");
		carMap.put("volvo", "volvo");
		
		member.setCarMap(carMap);
        
		//forwarding
		return "registerForm05";
	}
}

 

 

registerForm05.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<h2>Spring Form</h2>
<!-- modelAttribute 속성에 폼 객체의 속성명을 지정함 -->
<form:form modelAttribute="user" method="post" action="/registerForm01Post">
	<p>유저ID : 
		<input type="text" name="userId" id="userId" value="${user.userId}"placeholder="아이디"/>
		<!-- 위와 아래 코드는 같은 코드임 -->
		<form:input path="userId" disabled="true" readonly="true" placeholder="아이디" />
	</p>
	<p>이름 : 
		<input type="text" name="userName" id="userName" placeholder="이름" />
	</p>
	<p>패스워드 : 
		<input type="password" name="password" id="password"/>
		<!-- 값을 설정해서 뷰에 전달하더라도 패스워드 필드에 반영 안 됨 -->
		<form:input path="password" /> <!-- 바인딩되어서 값이 들어옴 -->
	</p>
	<p>소개글 :
		<form:textarea path="introduction" rows="6" cols="30"/> 
	</p>
	<p>취미 :
		<form:checkboxes items="${user.hobbyMap}" path="hobbyList"/> 
	</p>
	<p>보유자동차 :
		<form:checkboxes items="${user.carMap}" path="carList"/> 
	</p>
	<p>
		<!-- 세 개의 코드는 같은 코드임 -->
		<!-- <input type="submit" value="등록" /> -->
		<!-- <button type="submit">등록</button> -->
		<form:button name="register">등록</form:button>
	</p>
</form:form>

 

결과 화면7

 

 

 

  • form:checkboxes 사용 (값 저장한 것 체크) : Array 사용

 

MemberController.java

package kr.or.ddit.controller;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import kr.or.ddit.service.MemberService;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Card;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class MemberController {
	
	// DI(의존성 주입) / IoC(제어의 역전)
	@Autowired
	MemberService memberService;
	
	//1) 컨트롤러 메서드의 매개변수로 자바빈즈 객체가 전달이 되면 기본적으로 다시 화면으로 전달
	//컨트롤러는 기본적으로 자바빈즈 규칙에 맞는 객체는 다시 화면으로 폼 객체를 전달함
	//2) 폼 객체의 속성명은 직접 지정하지 않으면 폼 객체의 클래스명의 맨처음 문자를 소문자로 변환하여 처리함
	//3) ModelAttribute 애너테이션으로 폼 객체의 속성명을 직접 지정할 수 있음
	@GetMapping("/registerForm05")
	public String registerForm05(@ModelAttribute("user") Member member) {

//		model.addAttribute("member", new Member());
		
		//폼 객체의 프로퍼티에 값을 지정
		member.setUserId("gaeddongi");
		member.setUserName("개똥이");
		member.setPassword("java");
		member.setIntroduction("저는 개똥이 입니다.\n왜일까요?");
		
		//모델에  Map 타입의 데이터를 생성하여 추가한 후에 화면에 전달
		Map<String, String> hobbyMap = new HashMap<String, String>();
		hobbyMap.put("kmj", "Music");
		hobbyMap.put("ksy", "FootBall");
		hobbyMap.put("esb", "showping");

		member.setHobbyMap(hobbyMap);
		
		//Music을 미리 체크 처리
		String[] hobbyArray = {"ksy"};
		member.setHobbyArray(hobbyArray);
		
		//보유자동차
		Map<String,String> carMap = new HashMap<String, String>();
		carMap.put("qm5", "qm5");
		carMap.put("sm6", "sm6");
		carMap.put("volvo", "volvo");
		
		member.setCarMap(carMap);
		
		//volvo을 미리 체크 처리
		String[] carArray = {"volvo"};
		member.setCarArray(carArray);
        
		//forwarding
		return "registerForm05";
	}
}

 

 

registerForm05.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<h2>Spring Form</h2>
<!-- modelAttribute 속성에 폼 객체의 속성명을 지정함 -->
<form:form modelAttribute="user" method="post" action="/registerForm01Post">
	<p>유저ID : 
		<input type="text" name="userId" id="userId" value="${user.userId}"placeholder="아이디"/>
		<!-- 위와 아래 코드는 같은 코드임 -->
		<form:input path="userId" disabled="true" readonly="true" placeholder="아이디" />
	</p>
	<p>이름 : 
		<input type="text" name="userName" id="userName" placeholder="이름" />
	</p>
	<p>패스워드 : 
		<input type="password" name="password" id="password"/>
		<!-- 값을 설정해서 뷰에 전달하더라도 패스워드 필드에 반영 안 됨 -->
		<form:input path="password" /> <!-- 바인딩되어서 값이 들어옴 -->
	</p>
	<p>소개글 :
		<form:textarea path="introduction" rows="6" cols="30"/> 
	</p>
	<p>취미 :
		<form:checkboxes items="${user.hobbyMap}" path="hobbyArray"/> 
	</p>
	<p>보유자동차 :
		<form:checkboxes items="${user.carMap}" path="carArray"/> 
	</p>
	<p>
		<!-- 세 개의 코드는 같은 코드임 -->
		<!-- <input type="submit" value="등록" /> -->
		<!-- <button type="submit">등록</button> -->
		<form:button name="register">등록</form:button>
	</p>
</form:form>

 

결과 화면8

 

 

 

  • form:checkbox 사용

 

Member.java

하단의 String를 사용함

private String hobby;

 

 

MemberController.java

package kr.or.ddit.controller;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import kr.or.ddit.service.MemberService;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Card;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class MemberController {
	
	// DI(의존성 주입) / IoC(제어의 역전)
	@Autowired
	MemberService memberService;
	
	//1) 컨트롤러 메서드의 매개변수로 자바빈즈 객체가 전달이 되면 기본적으로 다시 화면으로 전달
	//컨트롤러는 기본적으로 자바빈즈 규칙에 맞는 객체는 다시 화면으로 폼 객체를 전달함
	//2) 폼 객체의 속성명은 직접 지정하지 않으면 폼 객체의 클래스명의 맨처음 문자를 소문자로 변환하여 처리함
	//3) ModelAttribute 애너테이션으로 폼 객체의 속성명을 직접 지정할 수 있음
	@GetMapping("/registerForm05")
	public String registerForm05(@ModelAttribute("user") Member member) {

//		model.addAttribute("member", new Member());
		
		//폼 객체의 프로퍼티에 값을 지정
		member.setUserId("gaeddongi");
		member.setUserName("개똥이");
		member.setPassword("java");
		member.setIntroduction("저는 개똥이 입니다.\n왜일까요?");
		
		//모델에  Map 타입의 데이터를 생성하여 추가한 후에 화면에 전달
		Map<String, String> hobbyMap = new HashMap<String, String>();
		hobbyMap.put("kmj", "Music");
		hobbyMap.put("ksy", "FootBall");
		hobbyMap.put("esb", "showping");

		member.setHobbyMap(hobbyMap);
		
		//Music을 미리 체크 처리
		String[] hobbyArray = {"ksy"};
		member.setHobbyArray(hobbyArray);
        
		member.setHobby("ksy");
		
		//보유자동차
		Map<String,String> carMap = new HashMap<String, String>();
		carMap.put("qm5", "qm5");
		carMap.put("sm6", "sm6");
		carMap.put("volvo", "volvo");
		
		member.setCarMap(carMap);
		
		//volvo을 미리 체크 처리
		String[] carArray = {"volvo"};
		member.setCarArray(carArray);
        
		//forwarding
		return "registerForm05";
	}
}

 

 

registerForm05.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<h2>Spring Form</h2>
<!-- modelAttribute 속성에 폼 객체의 속성명을 지정함 -->
<form:form modelAttribute="user" method="post" action="/registerForm01Post">
	<p>유저ID : 
		<input type="text" name="userId" id="userId" value="${user.userId}"placeholder="아이디"/>
		<!-- 위와 아래 코드는 같은 코드임 -->
		<form:input path="userId" disabled="true" readonly="true" placeholder="아이디" />
	</p>
	<p>이름 : 
		<input type="text" name="userName" id="userName" placeholder="이름" />
	</p>
	<p>패스워드 : 
		<input type="password" name="password" id="password"/>
		<!-- 값을 설정해서 뷰에 전달하더라도 패스워드 필드에 반영 안 됨 -->
		<form:input path="password" /> <!-- 바인딩되어서 값이 들어옴 -->
	</p>
	<p>소개글 :
		<form:textarea path="introduction" rows="6" cols="30"/> 
	</p>
	<p>취미 :
		<form:checkboxes items="${user.hobbyMap}" path="hobbyArray"/>
		<p></p>
		<form:checkbox path="hobby" value="kmj" label="Music"/>&nbsp; 
		<form:checkbox path="hobby" value="ksy" label="FootBall"/>&nbsp; 
		<form:checkbox path="hobby" value="esb" label="showping"/>
	</p>
	<p>보유자동차 :
		<form:checkboxes items="${user.carMap}" path="carArray"/> 
	</p>
	<p>
		<!-- 세 개의 코드는 같은 코드임 -->
		<!-- <input type="submit" value="등록" /> -->
		<!-- <button type="submit">등록</button> -->
		<form:button name="register">등록</form:button>
	</p>
</form:form>

 

결과 화면9

 

 

 

  • checkbox String 타입, boolean 타입, form:radiobuttons 사용

 

Member.java

하단의 String를 사용함

private String developer;
private boolean foreigner;

//스프링폼에서 radiobuttons의 path로 사용
private String gender;
//스프링폼에서 radiobuttons의 item로 사용
private Map<String,String> genderCodeMap;

 

 

MemberController.java

package kr.or.ddit.controller;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import kr.or.ddit.service.MemberService;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Card;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class MemberController {
	
	// DI(의존성 주입) / IoC(제어의 역전)
	@Autowired
	MemberService memberService;
	
	//1) 컨트롤러 메서드의 매개변수로 자바빈즈 객체가 전달이 되면 기본적으로 다시 화면으로 전달
	//컨트롤러는 기본적으로 자바빈즈 규칙에 맞는 객체는 다시 화면으로 폼 객체를 전달함
	//2) 폼 객체의 속성명은 직접 지정하지 않으면 폼 객체의 클래스명의 맨처음 문자를 소문자로 변환하여 처리함
	//3) ModelAttribute 애너테이션으로 폼 객체의 속성명을 직접 지정할 수 있음
	@GetMapping("/registerForm05")
	public String registerForm05(@ModelAttribute("user") Member member) {

		//성별
		Map<String,String> genderCodeMap = new HashMap<String, String>();
		genderCodeMap.put("Male", "남성");
		genderCodeMap.put("Female", "여성");
		genderCodeMap.put("etc", "기타");
		
		member.setGenderCodeMap(genderCodeMap);
		
		//미리 선택 처리
		member.setGender("Female");
        
		//forwarding
		return "registerForm05";
	}
}

 

 

registerForm05.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<h2>Spring Form</h2>
<!-- modelAttribute 속성에 폼 객체의 속성명을 지정함 -->
<form:form modelAttribute="user" method="post" action="/registerForm01Post">
	<p>개발자여부 : (String)
		<form:checkbox path="developer" value="Y" label="Y/없음"/>
	</p>
	<p>외국인여부 : (boolean)
		<form:checkbox path="foreigner" value="false" label="trud/false"/>
	</p>
	<p>성별 : (String gender)
		<form:radiobuttons items="${user.genderCodeMap}" path="gender"/>
	</p>
</form:form>

 

결과 화면10

 

 

 

  • form:radiobutton 사용

 

MemberController.java

package kr.or.ddit.controller;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import kr.or.ddit.service.MemberService;
import kr.or.ddit.vo.Address;
import kr.or.ddit.vo.Card;
import kr.or.ddit.vo.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class MemberController {
	
	// DI(의존성 주입) / IoC(제어의 역전)
	@Autowired
	MemberService memberService;
	
	//1) 컨트롤러 메서드의 매개변수로 자바빈즈 객체가 전달이 되면 기본적으로 다시 화면으로 전달
	//컨트롤러는 기본적으로 자바빈즈 규칙에 맞는 객체는 다시 화면으로 폼 객체를 전달함
	//2) 폼 객체의 속성명은 직접 지정하지 않으면 폼 객체의 클래스명의 맨처음 문자를 소문자로 변환하여 처리함
	//3) ModelAttribute 애너테이션으로 폼 객체의 속성명을 직접 지정할 수 있음
	@GetMapping("/registerForm05")
	public String registerForm05(@ModelAttribute("user") Member member) {

		//성별
		Map<String,String> genderCodeMap = new HashMap<String, String>();
		genderCodeMap.put("Male", "남성");
		genderCodeMap.put("Female", "여성");
		genderCodeMap.put("etc", "기타");
		
		member.setGenderCodeMap(genderCodeMap);
		
		//미리 선택 처리
		member.setGender("Female");
        
		//forwarding
		return "registerForm05";
	}
}

 

 

registerForm05.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<h2>Spring Form</h2>
<!-- modelAttribute 속성에 폼 객체의 속성명을 지정함 -->
<form:form modelAttribute="user" method="post" action="/registerForm01Post">
	<p>성별 : (String gender)
		<form:radiobuttons items="${user.genderCodeMap}" path="gender"/>
	</p>
	<p>
		<form:radiobutton path="gender" value="Male" label="남성"/>&nbsp;
		<form:radiobutton path="gender" value="Female" label="여성"/>&nbsp;
		<form:radiobutton path="gender" value="etc" label="기타"/>
	</p>
</form:form>

 

결과 화면11

 

 

반응형