Lonely Snowman
 

[Spring] 스프링 폼 태그

	@GetMapping("/registerForm01")
	public String registerForm01(Model model) {
		log.info("get방식 진입");

		model.addAttribute("member", new Member());

		return "registerForm01";
	}

jsp에 전달할 데이터를 위해 model을 매개변수로 지정

속성명을 "member"로 지정하고 폼 객체(new Member())를 모델에 추가함

스프링 폼 태그를 사용할 때 model로 폼 객체 보내주지 않으면 에러 난다

 

<%@ 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" %>

<form:form modelAttribute="member" method="post" action="/registerForm01Post">
	<p>유저ID :
<!-- 		<input type="text" id="userId" name="userId" placeholder="아이디" /> -->
		<form:input		path="userId" 	   placeholder="아이디" />
	</p>
	<p>이름 :
		<input type="text" name="userName" placeholder="이름" />
	</p>
	<p>
		<input type="submit" value="등록" />
		<button type="submit">등록</button>
		<form:button name="register">등록</form:button>
	</p>
</form:form>

<form:form> 의 modelAttribute 속성에다가 컨트롤러에 쓴 폼 객체의 속성명을 지정해야 한다

폼 객체의 속성명(member)과 스프링 폼 태그(<form:form)의 modelAttribute 속성값이 일치하지 않으면 에러가 발생한다

 

 

 

	@GetMapping("/registerForm02")
	public String registerForm02(Member member) {
		log.info("모델없이 자바빈즈 객체 넘겨주기");

		return "registerForm02";
	}

컨트롤러 메서드의 매개변수로 자바빈즈(필드, 기본생성자, getter/setter) 객체가 전달이 되면 기본적으로 다시 화면(view, jsp)으로 전달한다
그리고 폼 객체의 속성명은 직접 지정하지 않으면 폼 객체의 클래스명(Member)의 맨 처음 문자를 소문자로 변환(member)하여 처리한다

<form:form modelAttribute="member" method="post" action="/registerForm01Post">

modelAttribute 에 member를 쓴다

 

만약 VO이름과 다른 이름을 쓰고 싶다면 @ModelAttribute 로 따로 지정해 주면 된다

	@GetMapping("/registerForm03")
	public String registerForm03(@ModelAttribute("user") Member member) {
		log.info("모델없이 자바빈즈 객체 넘겨주고 어노테이션 사용해서 이름 지정");

		return "registerForm03";
	}
<form:form modelAttribute="user" method="post" action="/registerForm01Post">

 

 

 

그냥 인풋태그는 value로 값을 미리 세팅해 줄 수 있는데 스프링 폼 태그의 인풋 등을 사용하면 컨트롤러에 값 세팅해서 넘겨주면 알아서 값이 세팅된다

	@GetMapping("/registerForm04")
	public String registerForm04(@ModelAttribute("user") Member member) {
		log.info("값 세팅해서 넘겨주기");

		member.setUserId("leecs");
		member.setUserName("이창섭");

		return "registerForm04";
	}

스프링 폼태그 사용한 값 세팅

 

 



제출한 폼은 post방식으로 컨트롤러에서 받아준다

멤버VO에 받아도 되고 아래처럼 써도 된다

	@PostMapping("/registerForm01Post")
	public String registerForm01Post(
				Member member) {
//				@ModelAttribute("user") Member member, Model model) {
		log.info("post!");
		log.info(member.getPassword());
		log.info(member.getHobby());
                
	}

 

 

 


 

폼태그 속성

 

<input type="text" id="userId" name="userId" placeholder="아이디" />
<form:input		path="userId" 	   placeholder="아이디" />

그냥 인풋태그와 스프링 폼태그 인풋의 차이이다

form:input으로 쓰면 type="text"라는 뜻이고 path는 id와 name값을 의미한다

 

       <form:input path="userId" placeholder="아이디" disabled="true"  />
       <form:input path="userName" placeholder="이름" readonly="true" />

disabled : 폼 항목 비활성화

readonly : 읽기 전용

둘 다 기본값은 false이다

 

<form:password path="password"/>

패스워드는 값을 설정해서 화면에 전달하더라도 패스워드 필드에 반영 안 된다 미리 세팅 안됨

 

<form:textarea path="introduction" rows="6" cols="30" />
<form:hidden path="coin" />

textarea와 hidden 은 단일 태그로 써준다

 

<form:label path="userId">유저ID :</form:label>

path 가 라벨태그의 for가 된다

 

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

 

 

버튼은 요렇게 된다

 

<code><form:errors path="userId" /></code>
<font color="red"><form:errors path="userName" /></font>

입력값 검증 에러 표시는 이렇게 할 수 있다

결과는 각각 아래와 같이 나온다

그냥 form:errors만 쓰면 검정글씨로 나온당