SPRING

[SPRING] Form 커스텀 태그

예나부기 2021. 7. 20.

Form태그?

  • Spring에서는 <form:태그명> 형태로 되어있는 커스텀 태그를 제공
  • Form 커스텀 태그를 활용하면 Model 객체에 들어있는 값을 form 요소에 주입
  • 회원정보 수정 등, 정보수정 페이지를 구성할 때 사용하면 좋음 

Form Tag의 요소들

Form Tag Description
form:form 모든 폼 태그 요소들을 포함하는 parent 태그
form:input text field를 생성하기 위한 태그
form:radiobutton radio button을 생성하기 위한 태그
form:checkbox checkbox를 생성하기 위한 태그
form:password password input field를 생성하기 위한 태그
form:select 드롭다운 리스트를  생성하기 위한 태그
form:textarea 멀티라인(여러 줄 삽입) text field를  생성하기 위한 태그
form:hidden 히든 input field를  생성하기 위한 태그

 

사용방법

  •  태그 추가 (uri=한다음에 컨트롤+시프트 눌러서 가장 아래 링크로 클릭)
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
  • <form:form modelAttribute="userDataBean" action='result'> 사용할 데이터가 저장되어있는 Bean지정

 

Form태그를 사용하지 않은 예제

1) index.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>
	<a href='test1'>test1</a>
</body>
</html>

2) test1.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>
	<h1>test1</h1>
	<form action="result" method="post">
		이름 : <input type='text' name='user_name'/><br/>
		아이디 : <input type='text' name='user_id' /><br/>
		비밀번호 : <input type='password' name='user_pw'/><br/>
		우편번호 : <input type='text' name='user_postcode'/><br/>
		주소1 : <input type='text' name='user_address1'/><br/>
		주소2 : <input type='text' name='user_address2'/><br/>
		<button type='submit'>확인</button>
	</form>
</body>
</html>

3) 커맨드 객체 생성하기 (UserDataBean)

public class UserDataBean {
	private String user_name;
	private String user_id;
	private String user_pw;
	private String user_postcode;
	private String user_address1;
	private String user_address2;
	
	public String getUser_name() {
		return user_name;
	}
	public void setUser_name(String user_name) {
		this.user_name = user_name;
	}
	public String getUser_id() {
		return user_id;
	}
	public void setUser_id(String user_id) {
		this.user_id = user_id;
	}
	public String getUser_pw() {
		return user_pw;
	}
	public void setUser_pw(String user_pw) {
		this.user_pw = user_pw;
	}
	public String getUser_postcode() {
		return user_postcode;
	}
	public void setUser_postcode(String user_postcode) {
		this.user_postcode = user_postcode;
	}
	public String getUser_address1() {
		return user_address1;
	}
	public void setUser_address1(String user_address1) {
		this.user_address1 = user_address1;
	}
	public String getUser_address2() {
		return user_address2;
	}
	public void setUser_address2(String user_address2) {
		this.user_address2 = user_address2;
	}
	
	
}

4) TestController 생성하기

@Controller
public class TestController {
	
	@GetMapping("/test1")
	public String test1(UserDataBean bean) {
		
		bean.setUser_name("홍길동");
		bean.setUser_id("abcd");
		bean.setUser_pw("1234");
		bean.setUser_postcode("12345");
		bean.setUser_address1("주소1번입니다");
		bean.setUser_address2("주소 2번입니다");
		
		return "test1";
	}
}

5) test1.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>
	<h1>test1</h1>
	<form action="result" method="post">
		이름 : <input type='text' name='user_name' value="${requestScope.userDataBean.user_name }"/><br/>
		아이디 : <input type='text' name='user_id' value='${requestScope.userDataBean.user_id }'/><br/>
		비밀번호 : <input type='password' name='user_pw' value='${requestScope.userDataBean.user_pw }'/><br/>
		우편번호 : <input type='text' name='user_postcode' value='${requestScope.userDataBean.user_postcode }'/><br/>
		주소1 : <input type='text' name='user_address1' value='${requestScope.userDataBean.user_address1 }'/><br/>
		주소2 : <input type='text' name='user_address2' value='${requestScope.userDataBean.user_address2 }'/><br/>
		<button type='submit'>확인</button>
	</form>
</body>
</html>

Form태그 사용 예제

1) index.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>
	<a href='test2'>test2</a>
</body>
</html>

2) TestController 생성하기

@Controller
public class TestController {
	
	@GetMapping("/test2")
	public String test2(UserDataBean bean) {
		bean.setUser_name("홍길동");
		bean.setUser_id("abcd");
		bean.setUser_pw("1234");
		bean.setUser_postcode("12345");
		bean.setUser_address1("주소1번입니다");
		bean.setUser_address2("주소 2번입니다");
		
		return "test2";
	}
}

3) test2.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>
	<h1>test2</h1>
	<form:form modelAttribute="userDataBean" action='result'>
		이름 : <form:input path='user_name'/><br/>
		아이디 : <form:input path='user_id'/><br/>
		비밀번호 : <form:password path='user_pw' showPassword="true"/><br/>
		우편번호 : <form:input path='user_postcode'/><br/>
		주소1 : <form:input path='user_address1'/><br/>
		주소2 : <form:input path='user_address2'/><br/>
		<button type='submit'>확인</button>
	</form:form>
</body>
</html>

- action : 별도로 지정하지 않으면 현재 페이지의 주소로 지정됨 

- showPassword = "true"로 지정 시, 패스워드가 보이게 된다! 기본적으로는 안보임 

 

실행결과!!

form tag

위의 코드를 실행했을 때  페이지 소스보기(F12) 선택 시 아래와 같이 나오는 것을 알 수 있다.

input tag로 바뀌어있다.

 

 

Form Tag의 path에 정의해 놓은 'user_name'이 Input Tag의 id와 name으로 자동 세팅
userDataBean 객체 내의 'user_name' 프로퍼티를 찾아 Input Tag의 value 값이 세팅된다.

 

이 전 포스팅과 마찬가지로, 클래스 네임으로 자동으로 지정되는 이름(userDataBean)을 사용하지 않고 싶을 때는 

@ModelAttribute를 생략하지 않고 원하는 이름을 적어준다.

	@GetMapping("/test3")
	public String test3(@ModelAttribute("testBean") UserDataBean bean) {
		bean.setUser_name("홍길동");
		bean.setUser_id("abcd");
		bean.setUser_pw("1234");
		bean.setUser_postcode("12345");
		bean.setUser_address1("주소1번입니다");
		bean.setUser_address2("주소 2번입니다");
		
		return "test3";
	}

@ModelAttribute("원하는이름") UserDataBean bean 적용 시, jsp를 아래와 같이 쓸 수 있다.

<form:form modelAttribute="원하는이름" action='result'>
		이름 : <form:input path='user_name'/><br/>
		아이디 : <form:input path='user_id'/><br/>
		비밀번호 : <form:password path='user_pw' showPassword="true"/><br/>
		우편번호 : <form:input path='user_postcode'/><br/>
		주소1 : <form:input path='user_address1'/><br/>
		주소2 : <form:input path='user_address2'/><br/>
		<button type='submit'>확인</button>
	</form:form>

커맨드 객체를 사용하지 않고, Model을 사용한 예제

 

1) index.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>
	<a href='test2'>test2</a>
</body>
</html>

2) TestController 생성하기

@Controller
public class TestController {
	
	@GetMapping("/test4")
	public String test4(Model model) {
		UserDataBean bean = new UserDataBean();
		bean.setUser_name("홍길동");
		bean.setUser_id("abcd");
		bean.setUser_pw("1234");
		bean.setUser_postcode("12345");
		bean.setUser_address1("주소1번입니다");
		bean.setUser_address2("주소 2번입니다");
		
		model.addAttribute("test_user2", bean);
		
		return "test4";
	}
}

3) test4.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>
	<h1>test4</h1>
	<form:form modelAttribute="test_user2" action='result'>
		이름 : <form:input path='user_name'/><br/>
		아이디 : <form:input path='user_id'/><br/>
		비밀번호 : <form:password path='user_pw' showPassword="true"/><br/>
		우편번호 : <form:input path='user_postcode'/><br/>
		주소1 : <form:input path='user_address1'/><br/>
		주소2 : <form:input path='user_address2'/><br/>
		<button type='submit'>확인</button>
	</form:form>
</body>
</html>

'SPRING' 카테고리의 다른 글

[SPRING] FORM TAG 요소 - 2  (0) 2021.07.23
[SPRING] FORM TAG 요소 - 1  (0) 2021.07.21
[SPRING] 커맨드 객체  (0) 2021.07.20
[SPRING] View Resolver 뷰리졸버  (0) 2021.07.19
[SPRING] 객체로 파라미터 주입 받기  (0) 2021.07.19

댓글