Spring 공부 2021-04-12
뉴렉처 Spring 64강
POST 입력을 위한 Admin 컨트롤러 추가하기
POST 입력을 위한 컨트롤러와 VIEW 페이지를 준비해보도록 한다.
controller.admin.board 패키지를 생성해 목록을 보거나 수정 , 삭제 , 등록들이 있는 클래스(컨트롤러) 를 만들어준다
(*board 패키지를 추가하는 이유는 관리자가 관리하는내용이 Notice뿐 아니라 여러개가 있기때문 (이벤트,Notice 등등)
만든 NoticeCotroller는 어노테이션 컨트롤러를 적용해주고
RequestMapping을 사용하여 목록 , 등록 , 수정 , 삭제 할수있는 매핑경로를 지정해준뒤
클래스위에 admin기반의 board/notice를 관리하는 컨트롤러로써 적용해준다.
테스트를 해보기위해 reg가 매핑된 메소드에 @ResponseBody를 사용해 사용자가 입력한값이 출력는지 확인한다.
URL을 통해 확인해보면 500에러가나오면서 같은이름의 NoticeController가 있어서 충돌이 생기는것을 확인할수있다.
customer에있는 NoticeController와 admin에 있는 NoticeController가 충돌이 된것이다.
api의 NoticeController의 이름을 정해준것과 같이 컨트롤러의 이름을 정해주면된다.
adminNoticecontroller
컨트롤러의 이름을 정해주고 서버를 다시 시작하면 테스트가 성공적인것을 확인할수있다.
POST 입력 (text박스, textarea)
text,textarea
수업을 위해 받은 예제중 webapp -> static -> admin -> board -> notice 안에있는 html을 가지고 사용하도록한다.
static파일 사용하는방법
그냥 호출했을시에는 404에러가 발생한다.
servlet-context.xml을 가보면
resources를 static이라는 폴더안에 넣어두었고 사용자에게는 static을 root에 매핑해 놓았기때문에
static안으로 요청이간다 그렇기 때문에 URL에 static을 빼주고 요청을 해주면된다.
* 현재는 adminNotice 컨트롤러에서 reg를 테스트용도로 수정했기대문에 reg.html의 이름을
reg1.html로 수정하고 URL에 입력하면 사용하고자하는 예제 reg1.html이 나오는것을 확인할수있다.
reg1.html로 이동해서 전송되는 값을 action을 통해 매핑주소로 값을 보내고 전달이 잘되는지 확인해본다.
form에 action을 통해 reg 매핑주소로 POST 방식으로 값을보낸다.
text타입의 input과 textarea타입의 content가 reg의 매핑주소로 값이 전달된다.
reg1.html
값을 받기위해 admin NoticeController로 이동해서 코드를 작성해준다.
매개변수를 통해 FrontController에서 전달받은값을들 String.format을 사용하여 출력해본다.
(admin)NoticeController
서버를 시작해 해당 URL에서 값을 전송하면 매핑된 reg메소드를 통해서 반환된값이 출력되는 것을 확인
POST 입력 ( 콤보박스 값 입력 )
콤보박스
reg1.html 파일에서 action으로 콤보박스 값을 정해줄수있게하기위해
select 박스를 생성해 카테고리를 만들어주고 그값을 넘겨받을수있는 이름을 category라 정해준다.
reg1.html
(admin)NoticeController 에서는 넘어온 category값을 확인하기 위해 매개변수로 받은다음 코드를 작성해준다.
(admin)NoticeController
값을 입력해 전송해보면 category값이 출력이 되는것을 확인할수있는데 한글 깨짐현상이 발생한다.
(* 지난번에 responsebody에 인코딩방식을 설정했기때문에 출력하면서 깨진것은아니고 입력받을때 깨진것 )
이부분은 나중에 수정하기로한다.
일반적으로 select박스는 식별자를 전달받는것을 원하기때문에 value값으로 항목에 해당하는 식별자를 전송한다.
(EX)
POST 입력 ( 체크박스 , 라디오버튼 입력 )
체크박스
food 별로 숫자를 매겨서 매개변수로 받기에는 코드가 많이 복잡해지기때문에
일반적으로 name을 foods로 통일한 다음 개발자도구를 사용해보면
foods 뒤에 숫자로 가는것을 확인할수있다.
그렇기 때문에 전송되는 내용을 받을때 배열로 받아준다. (복수형으로하는것이 바람직함)
foods를 향상된 for문으로 받은뒤 콘솔창에 출력해보면 선택된 foods의 value값이 나오는것을 확인할수있다.
라디오버튼
radio버튼은 name이 같으면 하나의 그룹으로 묶이게된다.
하나만 선택하기위해 같은 name으로 카테고리를 만들어준다.
(admin)NoticeController에서 받는 방법은 간단히 복수가 아니기때문에 text와 같은 방식으로 매개변수로 정해서
받아주면된다.
뉴렉처 Spring 67강 완