어제 @RequestParam int data1 이렇게 클라이언트한테서 받아오는 방법이 있었다.
만약 data가 1,2,3,4,5 이렇게 여러개 있다면 일일이 다 선언해주는 것이 아니라 map 을 이용해 한 번에 받아올 수가 있다.
public String test1(@RequestParam Map<String,String> map, @RequestParam List<String> data3 ) {
String data1=map.get("data1");
String data2=map.get("data2");
String data33=map.get("data3");
System.out.println("data1 : "+data1);
System.out.println("data2 : "+data2);
System.out.println("data3 : "+data33);
for(String str:data3) {
System.out.println("data3: "+str);
}
return "result";
}
동일한 이름으로는 하나만 받아올 수 있기에 data3 값이 2개면 가장 첫 번째 값만 map에 들어가게되고
data3 같이 여러개의 데이터 값이면 list를 통해 받아와야 한다.
@ModelAttribute 어노테이션을 이용해 받아올 수도 있다.
public String test2(@ModelAttribute DataBean bean1,@ModelAttribute DataBean2 bean2) {
System.out.printf("data1 : %d\n",bean1.getData1());
System.out.printf("data2 : %d\n",bean1.getData2());
for(int number1: bean1.getData3()) {
System.out.printf("data3:%d\n",number1);
}
System.out.printf("bean2.data1 : %d\n",bean2.getData1());
System.out.printf("bean2.data2 : %d\n",bean2.getData2());
return "result";
}
Beans 패키지를 생성해주고 안에 DataBean 과 DataBean2 라는 클래스를 만들어 주었다. 클래스 코드는
public class DataBean {
private int data1;
private int data2;
private int [] data3;
public int getData1() {
return data1;
}
public void setData1(int data1) {
this.data1 = data1;
}
다음과 같다. 세터와 게터가 변수별로 다 있다.
그리고 test2 메서드와 같이 @ModelAttribute DataBean Bean, @ModelAttribute DataBean Bean2
이렇게 가져와서 사용하면된다. 어노테이션은 생략이 가능하다. 이것은 커맨드 객체이다. 요건 좀따 다시 다룬다.
이제 java에서 jsp로 데이터를 보내는 방식을 알아보자.
HttpServletRequest request
request.setAttriubte("data1",100);
Model model
model.addAttribute("data1",100);
ModelAndView mav
mav.addObject("data1",100);
mav.setViewName("test1");
return mav;
이렇게 3가지 방법이 크게 있는데, 원하는대로 골라서 사용하면 된다.
그리고 jsp 에서 ${requestScope.data1} 를 통해 받아오면된다. requestScope는 생략가능하다.
@ModelAttribute DataBean bean
은 ModelAttribute로 부터 주입받은 bean이 request에 담기게 되고, 클라이언트에서 보내준 파라미터의 이름 그대로 setter 를 이용해 저장하게 된다.
그리고 만약 java파일에서 별다른 지시가 없다면 앞 글자를 소문자로 딴 dataBean 을 통해 jsp에서 사용할 수 있다.
${requestScope.dataBean.data1} 이렇게 말이다.
이제 이것을 이름을 정해줄 수 있는데 이때에는 어노테이션 생략이 불가능하다.
@ModelAttribute("testData") DataBean bean
${requestScope.testData.data1} 이렇게 받아온다.
하지만 이렇게 받아오는 것은 너무나도 비효율 적이기에 form 태그를 이용해 간단히 받아올 수가 있다.
jsp 에 <%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 다음과 같이 선언한다.
<form:form modelAttribute="dataBean" action='test2'>
user name : <form:input path="userName"/><br/>
user age : <form:input path='userAge'/><br/>
user id : <form:input path='userId'/><br/>
</form:form>
이제 보면 modelAttribute =" " 값을 통해 해당 bean 에서 들고와서 밑의 path 는 그 bean 안의 userName을 가져온다는 뜻이다.
modelAttribute 생략 시에는 command 라는 값이 id가 된다.
action 은 요청할 주소를 설정하고 생략 시에 현재 주소가 된다. 버튼 눌렀을 시 가는 곳
method는 방식을 정하며 생략시 post가 된다.
form:button 은 submit 버튼을 생성해주고 disabled 를 통해 끌 수도 있다.
<form:button disabled="true">확인</form:button>
<form:hidden> 은 hidden 되는 input type을 생성해준다.
<form:hidden path="a1"/> 보이지않고 소스보기에는 나와있는 해당 bean의 a1 값을 이 태그안에 넣어주게 된다.
<form:input path="a1"/> 은 input type a1를 나타내준다.
<form:password path="user_pw"/> 는 비번을 보여주는데 이렇게만 나타내주면 볼 수가 없어서
showPassword="true" 를 설정하면 보이게 된다.
<form:textarea path="user_id"/> 는 크기 설정이 가능한 textarea를 보여주게 된다.
항목1
항목2
항목3
'공부 기록들' 카테고리의 다른 글
2020.04.17 MVC(5) ( SessionScope, ApplicationScope) (0) | 2020.04.17 |
---|---|
2020.04.16 MVC(4) ( Bean 주입 java/xml, form 태그, redirect, forward, requestScope ) (0) | 2020.04.17 |
2020.04.13 MVC(2) (파라미터 받아오기) (0) | 2020.04.13 |
2020.04.10 static에 대해서 & MVC(1) (0) | 2020.04.10 |
2020.04.07 Spring(7) - JDBC 및 오류(ORA-28040,ORA-01017),템플릿, 커넥션풀 (0) | 2020.04.07 |