전정부 jsp를 살펴보다가 searchVO 모델 객체가 사용되고 있어서 어떻게 사용되고 있는지 문득 궁금해졌다. 

model.addAttribute() 함수를 통해서만 객체가 VIEW 단으로 넘겨지는 줄로만 알고 있는 상황이었기 때문이다. 

 

결론은 @ModelAttribute("searchVO") BoardVO boardVO 이렇게 받는다면 BoardVO 객체에 담긴 변수들과 이름이 맞다면 자동으로 setter를 통해 값들을 담아주고 마지막에 model.addAttribute를 따로 할 필요없이 자동으로 View단으로 넘겨주게 된다.

 

즉, boardVO객체를 매핑받아서 searchVO라는 다른 이름으로 view단에서 사용할 수 있고, 또 boardVO객체에 다른 정보들을 담아서 articleVO라는 이름으로도 활용할 수 있도록 하는것이다.

=> model.addAttribute("articleVO", boardVO);

 

 

참고 출처: OKKY ; EastGlow님 답변 
https://okky.kr/article/563793

SearchVO 객체에 담긴 변수들과 이름이 맞다면 자동으로 set해줘서 담아주고 마지막에 model.addAttribute를 따로 할 필요없이 자동으로 View단으로 넘겨주게 됩니다. 한마디로 넘어온 파라미터의 변수명만 SearchVO 안에 있는 애들과 맞다면 자동으로 searchVO에 담아주고 View단으로 넘겨주는 역할이라 할 수 있을 거 같네요.

 

BoardVO: 객체 클래스 -> DB table의 attributes 와 같은 내용을 가진다. (이름도 같음)

BoardDAO: DB에서 가져오는 business 로직 위치

BoardService: interface (그냥 함수 이름 목록)

BoardServiceImpl: 함수 구현 코드 위치

 

BoradController: URL을 가지고 적절히 여러 URL들을 각 특정 URL요청에 맞게 처리해주는 곳.

 

 

에러 메세지: 

Could not autowire field: com.onepage.video.VideoService com.onepage.myapp.HomeController.videoService;

 

어찌보면 당연하겠지만 내 실수는 패키지명을 잘못 설정해준것에 있었다.

원인) 

패키지명을 com.onepage.myapp.myapp.playlist라고 해버림.

 

해결방법)

패키지명을 com.onepage.myapp.playlist라고 고침. 

 

Date 타입을  mysql 저장을 하려고 하는데 mysql에 저장이 안되는 문제가 발생했다. (필자는 mybaits를 활용하여 db에 저장하고 있다. 근데 아무리 해도 Date 타입이 안 들어가져서 디버깅을 한 내용이다.)_ 

이게 Date 포맷, 즉 스프링 mvc에서는 형식을 지정해줘야지 sql로 저장할 수가 있다.

ex) 2021-04-23 으로 저장하고 싶은데 이게 나라마다, 날짜를 나타내는 형식이 달라서 스프링이 자동 변환해주는 문자열, 정수형, 부울타입 정도의 기본 변환 외에는 형식을 지정해줘야 한다.

 

클래스VO.java 에서 

@DateTimeFormat라는 애너테이션으로 형식을 지정해줍니다. (그리고 진행시 오류 해결!) 

 

본 포스팅은 아래 블로그를 참조하였습니다.

www.manty.co.kr/bbs/detail/develop?id=73

 

아나.... 이것 때문에 4시간 걸렸네요... 

date는 VO, DAO에서 String 타입으로 해줘야 에러 안 뜹니다. 

안 그럼 

이렇게 뜨는데, 보통 400에러 뜨는건 파라미터에 문제가 있을 때이다.

 

정리:

1) Date는 VO, DAO에서 String 타입으로 설정

2) DB 테이블은 date 타입으로 만들어줘도 무방하다.

 

검색: spring date 400 에러

 

namubada.net/112

 

 

 

 

form 에서 action으로 넘어갈때 URI에서 addok로 잘 넘어가는데 400에러가 발생하는 이유는 form의 파라미터 개수가 안 맞거나 mapper에서 name 이름이 동일하지 않아서 그렇다. 

일단 개수가 맞게 넘어가는지 확인하는 가장 편리한 방법은 form에서 php로 넘겨받아서 확인하는 것이다.

즉 form.html에서 넘기면 action=form.php에서 받아서 출력이 잘 되는지 확인한다.

 

<form action="form.php" method="post"> 로 했을 경우: 

역시나 spring에서 아무런 에러 로그를 안 보여줬는데 여기서는 일단 에러가 뭔지인지 그나마 얘기는 해준다.

 

list.jsp에서 table 이 안나와서 왜 그런가 알아보다가, 

<table id="list" width="90%">

<c:forEach items="${list}" var="u">

 

즉, c:forEach에서 ${list}를 못 읽어오는것 같아서 찾아보니, jstl 라이브러리를 import하지 않아서 그런거였다...

 

 

외부 css 파일 참조하게 만들기:

<link rel="stylesheet" href="${path}/resouces/css/liststyle.css">

 

 

No Mapping found for HTTP request Error:

www.baeldung.com/spring-mvc-404-error

 

 

 

 

 

 

servlet-context.xml에서 /* 와 /** 차이점이 궁금해졌다: 

Ant path style patterns 을 이용한 방법이라 한다. ( stackoverflow.com/questions/2952196/ant-path-style-patterns )

 

? : 1개의 문자와 매칭 (matches single character)

* : 0개 이상의 문자와 매칭 (matches zero or more characters)

** : 0개 이상의 디렉토리와 파일 매칭 (matches all files / directories)

 

stackoverflow.com/questions/12569308/spring-difference-of-and-with-regards-to-paths

  1. ? matches one character
  2. * matches zero or more characters
  3. ** matches zero or more 'directories' in a path

2021/03/31:

servlet-context.xml : 

interceptor에서 exclude-mapping

elfinlas.tistory.com/343

 

 

 

 

+ Recent posts