본문 바로가기
Spring/Spring MVC 5

Form 커스텀 태그

코동이 2020. 5. 25.

Form태그

JSP로 표현을 한다면 코드양이 길고, 

JSTL을 사용하면 양이 줄어든다.

 

Form에 어떻게 Bean을 주입할까?

1. @ModelAttribute로 받아 setter를 통해 일일히 다 설정하고 request로 넘기기 

2. model.addAttribute("name", 객체)로 전달하기 

 

<TesController.java>

@GetMapping("/test1")
public String test1(@ModelAttribute UserDataBean bean){
	bean.setUser_name("홍길동");
    bean.setUser_id("abcd");
    bean.setUser_pw("1234");
    bean.setUser_postcode("12345");
    bean.setUser_address1("address1");
    bean.setUser_address1("address2");
    return "test1";
}

@GetMapping("/test2")
public String test2(Model model){
	UserDataBean bean = new UserDataBean();
	bean.setUser_name("홍길동");
    bean.setUser_id("abcd");
    bean.setUser_pw("1234");
    bean.setUser_postcode("12345");
    bean.setUser_address1("address1");
    bean.setUser_address1("address2");
    
    model.addAttribute("test_user2", bean);
    return "test2";
}

1번보다는 2번이 많이 사용된다. 

 

또한 Controller에서 넘겨 준 Databean에 대한 정보를 어떻게 표현 할 것인가 2가지 방법이 있다.

 

1. EL만 이용하기 => value , name, id를 다 설정해야 한다.

2. JSTL 이용하기

 

	<form action="result" method="post"><br/>
		이름 : <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>
    
    ==============================================================
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    
    	<form:form modelAttribute="userDataBean" action="result">
	<!-- id와 name도 path와 똑같이 user_name으로 설정된다. -->
		이름 : <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/>
	</form:form>

EL만 사용해서 구현하는 것은 굉장히 지저분하다.

UserDataBean 클래스는 마찬가지로 맨 앞이 소문자로 변한다.그 이후에는 해당 클래스의 변수의 이름을 적어두면 된다.

[bean 클래스명.변수명]을 사용한다. name, value 등을 다 설정해야 한다.

 

JSTL은 form이라는 태그 라이브러리를 사용한다. form관련 설정 시 , 맨 앞에 form을 붙인다.

modelAttribute에 원하는 클래스이름을 쓰면, 해당 클래스에서 가지고 있는 메소드들이 등록된다.

 

<form:input path="user_name" />

=>

<input type="text" id="user_name" name="user_name" value="user_name저장된 값"/>

 

즉 path에 써 있는 값이 id와 name으로 등록된다. 게다가 model값을 추출하여 value에 등록시킨다.

 

model을 이용해서 view를 호출했다면 modelAttribute에 userDataBean 대신에 test_user2를 쓰면 된다.

modelAttribute에서 class 명이 맨 앞에 소문자로 적힌 userDataBean임을 확인한다.

 

반응형

'Spring > Spring MVC 5' 카테고리의 다른 글

RequestScope  (0) 2020.05.26
Redirect와 Forward  (0) 2020.05.26
커맨드 객체  (0) 2020.05.25
ViewResolver  (0) 2020.05.25
파라미터에 객체를 주입받기  (0) 2020.05.25