스프링 폼 태그 라이브러리
스프링 폼 : HTML 폼을 표시하기 위한 태그 라이브러리
스프링 폼을 이용하면 HTML 폼과 자바 객체를 쉽게 바인딩할 수 있음
사용하기 위해선 아래와 같은 taglib 설정을 추가해야 함
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
폼 요소 : 화면(뷰,jsp)에 전달할 데이터를 위해 모델을 매개변수로 지정
<form:form>
- 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>
- 매개변수에 자바빈즈 객체를 넣음
바로 위의 방법과 달리 이와 같이 작업할 수 있음
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>
=> 컨트롤러의 이름과 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>
- input과 form:input 비교하여 값 가져오기 (방법)
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>
+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>
- 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>
- 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>
- 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>
- 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"/>
<form:checkbox path="hobby" value="ksy" label="FootBall"/>
<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>
- 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>
- 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="남성"/>
<form:radiobutton path="gender" value="Female" label="여성"/>
<form:radiobutton path="gender" value="etc" label="기타"/>
</p>
</form:form>
'스프링 프레임워크' 카테고리의 다른 글
[스프링 프레임워크] 23장 숨겨진 필드요소, 라벨요소, 입력값 검증 (0) | 2024.05.13 |
---|---|
[스프링 프레임워크] 22장 공통 코드로 관리 (0) | 2024.05.10 |
[스프링 프레임워크] 20장 모델을 통한 데이터 전달 (0) | 2024.05.09 |
[스프링 프레임워크] 19장 파일업로드 Ajax 방식 요청 처리 (0) | 2024.05.08 |
[스프링 프레임워크] 18장 Ajax 방식 요청 처리 (0) | 2024.05.08 |