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 |