4월 15일

컨트롤러 매개변수의 타입에 대해 알아보자
요청 파라미터란??

cf) https://velog.io/@limdae/7.-%EC%9A%94%EC%B2%AD-%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0-%EC%B7%A8%EB%93%9D%ED%95%98%EA%B8%B0

 

p50
a태그의 요청방식은 겟방식
클라이언트에서 보내는 모든 데이터는 문자이기 때문에 String으로 모두 받을 수 있다.
숫자나 실수 불리언 값으로 받고 싶다면 매개변수 파라미터의 타입을 int, double, boolean으로 바꾸어주면 된다.

파라미터에 어노테이션 붙여주기 param5

ch03 컨트롤러 생성.
메뉴 챕터03 부분 수정

# receiveParamData
${ } --> 스페셜 랭귀지
<p>param1: ${param1}</p>


# Ch03controller에서 model을 추가해주고
model.addAttribute("param1", param1);을 해주면
receiveParamData.jsp에서 ${param1}값이 나오게 된다.

---
/ch03/receiveParamData?param1=문자열&param2=5&param3=3.14&param4=true&param5=2024-04-15
메뉴에서 설정한 href는 총 5개의 매개변수의 갯수..
따라서 컨트롤러에서 매개변수 String param6을 추가하면 null값이 됨

chNum을 ch03으로 바꾸어서 처리해봄

# postMethodForm
→ 카드 바디 교수님 소스
ch03 포스트 방식 폼 데이터 얻기

p51
# 03 컨트롤러 requestParamAnnotation 추가
매개변수 @RequestParam("param1") String arg1,


# requestParamAnnotationRequired 
@RequestParam의 required 속성
cf) https://velog.io/@hellozin/RequestParamrequired-false-%EC%A3%BC%EC%9D%98%ED%95%A0-%EC%A0%90

 

# requestParamAnnotationDefaultValue
@RequestParam의 defaultValue 속성

입력 값 없이 넘어오게 될 때, 기본 값 설정 가능.

cf) https://ococ99.tistory.com/138

# typeChange
요청 파라미터 타입 변환

@RequestMapping("/typeChange")
	public String typeChange(
			String param1, 
			int param2, 
			double param3, 
			boolean param4,
			@DateTimeFormat(pattern="yyyy-mm-dd") Date param5,
			int param6, --> 값이 없을 경우, 그냥 이렇게 하면 안된다.
			@RequestParam(defaultValue="0") int param6, 
			Model model) {
		log.info("requestParamAnnotationDefaultValue() 실행"); 
		
		model.addAttribute("chNum", "ch03");
		model.addAttribute("param1", param1);
		model.addAttribute("param2", param2);
		model.addAttribute("param3", param3);
		model.addAttribute("param4", param4);
		model.addAttribute("param5", param5);
		model.addAttribute("param6", param6);
		return "ch03/receiveParamData";
	}


@DateTimeFormat(pattern="yyyy-mm-dd") Date param5, 

@RequestParam(defaultValue="0") int param6,

→ 어떤 값이 들어올지 모르는데 값을 int형으로 받고 싶을 때, 기본값을 설정해두고 받는다.

 

# menu.jsp에서 아코디언 클래스 값에 ${chNum=='ch01'?'':'collapsed'}을 하는 이유에 대해 다시 설명

아코디언 해당 챕터의 메뉴 리스트를 클릭할 때마다 펼쳐놓기 고정.

삼자 대항자.

 

# 메뉴에서 getDto 추가, dto패키지에 Dto클래스 추가

 

★  클래스나 어떤 파일의 이름을 잘못 입력했을 때  Rename을 하려면 서버를 지웠다가 다시 적용시켜야 한다.

→ 이클립스의 고질적인 문제

 

p52

model을 써야 jsp에서 쓸 수 있었는데,

객체로 받는다면 바로 쓸 수 있다.

객체 → getDto 추가, dto패키지에 Dto클래스 이걸 컨트롤러 public String getDto(Ch03Dto dto, Model model)로 받고

jsp에서 <p>param1: ${ch03Dto.param1}</p> 이런 형식으로 건내받을 수 있다.

 

public String getDto(@ModelAttribute("dto") Ch03Dto dto, Model model)

이렇게 한다면 jsp파일에서 <p>param1: ${dto.param1}</p>이렇게 사용할 수 있다.

 

@ModelAttribut("dto")가 빠지면  ch03Dto로 JSP에서 사용

<p>param1: ${ch03Dto.param1}</p>

 

앞으론 객체(DTO)로 받아와서 사용하자. 

 

53p

메뉴에 리스트 하나 추가 

<a href="javascript:requestAjax()">AJAX로 요청 파라미터 보내기</a>

a 태그의 href 속성값을 저렇게면 버튼의 효과를 줄 수 있다.

(자바스크립트로 함수실행하라는 코드가 됨)

<button onclick="requestAjax()">AJAX로 요청 파라미터 보내기</button>

 

# AJAX 사용

ajax.jsp에서 requestAjax() 사용

똑같이 객체로 받아서 사용

이것은 서버에서 오는 정보이다.

p53 우리가 한 코드로 수정

 

CH04. Controller Validation

 

p54

유효성 검사의 흐름

 

 

p56

에러처리 다국어

MessageSource 에러 메시지를 다국어 처리하게끔 되어 있다.

Properties Editor Plugin 이것은 일단 무시하고 넘어간다 (복잡하다)

 

 

p58

validator 작성

대부분 폼 단위로 작성한다.

개발자들은 아이디 검사기, 비밀번호 검사기, 이메일 검사기 등등 따로따로 만들어줄 수 있다.

 

폼 단위로 밸리데이터를 만드는 것은 관리하기 쉽다.

 

1. 밸리데이터 인터페이스를 구현해야함

2. 이 유효성 검사기가 지원하는 형식이냐 아니냐를 확인하는 메소드 구현

입력 폼 - 로그인 폼

DTO가 로그인 폼을 받음

밸리데이터가 DTO를 받았는데, 이것이 유효성 검사를 할 수 있는 것인지 아닌지 확인 (메소드: supports)

검사할 수 있으면 true, 없으면  false

 

p59

Ch04Form1.class 는 유효성 검사를 하기위한 DTO

ex)

Ch04Form form = new Ch04Form();

Ch04Form form = new Ch04Form();

→ 가능하다. Ch04Form()을 form변수에 계속 할당 가능

 

Assign : 할당하다.

Ch04Form1.class.isAssignableFrom(clazz)

→ clazz 타입이 Ch04Form1.class로 유효성 검사 할당이 가능한지 확인

→ Ch04Form1 폼으로 유효성 검사가 가능하다면 true, 아니면 false

 

true를 반환했을 때 validate 메소드 실행

clazz가 ch04Form1 형식이 맞다는 것을 확인했으니, 강제 형변환이 가능하다.

 

각 양식 별로 error 검사를 하며  rejectValue(거절한 값)을 반환한다.

 

ch04 컨트롤러 생성과 menu.jsp 업데이트, ch04 뷰 폴더 생성과 loginForm.jsp 파일 생성

DTO폴더 → Ch04LoginForm, Ch04LoginFormValidator 클래스 생성

Bean Validation API - Maven 폼에 추가

https://mvnrepository.com/artifact/javax.validation/validation-api/2.0.1.Final

 

ch04 컨트롤러 바인더, 포스트 매핑 등 추가

@ Valid 어노테이션 때문에 유효성 검사가 가

 

● 유효성 검사가 실패했을 때

계속적으로 입력 폼을 보여준다.

 

● 유효성 검사가 성공했을 때,

redirect를 하는 이유?

사용법은 return "redirect:/";

응답받으려면 다시 다른 쪽으로 요청하라는 의미.

→ 게시물 작성하기 버튼을 누르면? 다시 게시물 목록으로 돌아가는 것과 같다.

→ 결제하기 버튼을 누른다면? 계속 결제창으로 남아있는 것이아니라 완료 주소로 옮길 때.

 

유효성 검사에 따라 홈페이지로 이동하거나 같은 주소에 머물러 있는다.

 

loginForm.jsp 맨 위에 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 추가.

바디부분 <div><form:errores path="ch04LoginForm.mid"/></div> 추가

→ 에러 메시지를 출력하게 만들어준다.

→ Ch04LoginFormValidator에서 아이디 검사, 비밀번호 검사 부분의 에러 값을 출력하게 된다.

→ 다국어를 적용해야 될 경우를 생각해보자. 가능할까..? (교수님 의견 : 에러메시지나 제목 등 일부만 가능하게 할 것이다.. 불가능에 가깝다고 본다.)

 

input태그에서 value="${ch04LoginForm.mid}" 해주면 절대경로로 객체의 값을 대입한 것...

 

** 프로젝트 시 사용자가 찜한 목록이나 장바구니에 넣은 것들을 기억하는 수단으로 활용할 수 있을까?

 

※ 과제

회원가입 폼 만들어보기.

 

최소 : 아이디 이름 패스워드 이메일 전화번호

 

'JAVA' 카테고리의 다른 글

40일차 2024-04-23  (0) 2024.04.23
36일차 2024-04-17  (0) 2024.04.17
33일차 2024 - 4 - 12  (0) 2024.04.12
32일차 2024 - 4 - 11  (0) 2024.04.11
31일차 2024 - 4 - 9  (0) 2024.04.09

+ Recent posts