공부 기록들

2020.04.14-15 MVC(3) (파라미터 받아오기2, 커맨드 객체)

Bepoz 2020. 4. 15. 23:48

어제 @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