74일 - POJO에서 model 만들어서 전달하는 방법 2가지 (ModelAndView, Model model //직접 포워딩은 하지 못한다는거), tiles.xml 집중화(*)
다른 결과물들도 (edit, reg,..) 합치는 작업을 해보자.
간단히 data 이용하는 방법을 봐보자.
예전에는 리퀘스트로 보냈는데, 지금은 중간에 뭐가 끼어져있음.
- 예전 방식은 모델 심어서 포워딩 해주는
지금은
POJO는 포워딩 못함
포워딩은 서블릿끼리만 가능
그래서 프론트 컨트롤러 -> POJO 가면 -> view로 포워딩을 못함
그래서 포워딩 해달라고 POJO가 부탁해야함
- 그래서 request에 담을 필요 없음
POJO에서는 model 만들어서 주면 됨
- 그럼 프론트 컨트롤러가 view 단에 포워딩 해준다.
POJO -> 스프링에 전달 방법
1) 반환값 이용해서 return
- 예전에는 모델, 뷰 정보 받아서 반환했었음
근데 클릭하면 detail로 안넘어가고 오류남
detail 페이지를 만들어보자.
- 정-말 <mian>만 남기고 다 지우기
컨트롤러에서 url 맵핑해보자
//
이제 tiles를 쓰자.
- 어제는 list만을 위한 이름이었음
detail을 위한 이름은 어떻게 줄까!
-> 패턴을 만들어보자
별을 여러개 올 수 있는데, 순서로 활용 가능
중괄호임
나는 57번째줄에서 "WEB-INF/..." 이런식으로 '문서'를 호출해줘가지고 계속 이전 페이지 모습이 나왓었음
- 잘 실행해준거지
근데 우리는 지금 뭘 하는 중이야?
tiles한테도 detail 페이지 페이지 하라고 일을 주라는거지
//
reg.jsp도 main만 남기고 다 지우기
reg 페이지 정상적으로 나올 수 있도록
-> NoticeController에 수정하기
어제 한 예제 때문에 저 인자를 지워줘야 제대로 나온다 :)
사실 ModelAndView 만드는 방법 .. 요즘은 다른거로
모델
리턴하지 않고 반환하는 방법도 있다.
Pojo 안에서
변수 선언 가능 Model model
- 객체 만든게 아니라 선언만 한건데...!
프론트 컨트롤러가 모델 만들어서 전달함
프론트 컨트롤러가 -> 참조 만들어서 pojo한테 전달
- 참조된거로 값을 받으면
저절로 값은 프론트 컨트롤러가 가진..
요지는 변수 선언만 하면 된다.
모델 정보는 이렇게 26번째
뷰 정보는 45번째
// 이렇게 많이 쓴다.
'글쓰기' 페이지에서 -> '목록'을 가려면
한 단계 더.
tiles 쓸 때 * 두 개 올 때의 상황.
admin 폴더 아래 notice 뿐만 아니라 event 폴더도 존재하지.
여기에도 별을 줘보자!
//
만약 앞의 admin도 다르게 하고 싶다면?
Q. 만약 admin이 아니라 일반 사용자 url이라면?
-> 따로 만들어줘야
이러면 큰 일남
3단계짜리 오면 R의 위에거로 매칭됨
- *이 몇 개냐로 매칭되는게 아님
이렇게 이상한 url들도 다 걸려버리게 되는 것
-> 엉망징창 됨
범위가 넓은 녀석은 아래로 내려야 함!
//
Q. admin의 index는?
- 애는 tiles를 어떻게 써줘야 하나
admin index는 위에거로 매칭 되어야 하는데 ㅠ (admin의 레이아웃을 줘야 하니)
아래거로 매칭되서는 또 엉망징창
-> 별도로 적어준다.
대신 특화된 녀석은 반드시 위에!
그런데 하다보니 member가 또 등장.
admin, member 레이아웃 다른 상황
흠... index 하나 때문에 이렇게 따로 적어줘야하다니..
-> 그렇다고 앞에를 *로 묶고.index로 해주면 안 됨
-> 반복을 줄여보는 방법을 알아보자.
만~약에 layout이 admin, member가 같다면 (내용은 다르지만 구조가 같다면)
-> layout은 모~든 사용자가 사용가능한게 되서
공통 레이아웃 정의해서, root에다가 레이아웃 하나만 있으면 되겠지. 그리고 name="common"이라고 해보자.
aside, main은 다르다고 하고 2개만 두면
- 아래쪽에서 extends "common"하면 됨
//
순서
ex) 관리자 공지사항에서
뭘 클릭하면 제목이 떠야
layout에서
12번째줄에서 제목이 오는것
detail 페이지 내용을 가지고 12번째줄을 바꿔야
저기 동그라미 부분을 바꾸고 싶은 것
// 먼저 적용하는 것부터 알아보자.
레이아웃에서 뭘 바꾸려고 한다면 tiles.xml 거를 가지고 바꾸는거지
// 무식한 방법ㅎㅎ
자바스크립트도 이렇게 할 수 있지~~
Q. JS 없는 것들은 이렇게 오류가... (페이지는 잘 나오더라도)
-> 위에처럼 js 가져다가 쓴 건 매우 무식한 방법
아까는 src="<tiles...>" 이렇게 있었었지.
//
Q. js 파일 없을 경우 포함되지 말아야
- 비관적인 얘기지만 그럴 방법은 없다. 그냥 넣는것.
- js 없을 때는 그냥 (console)에 404 뜨게 방치하는 수밖에 없다.
//
Q. 제목으로 들어오는 title이 사용 중. 근데 문제는 "제목"이라고 박혀있는걸 사용중이지.
NoticeController 가기
- 모델을? tiles.xml로 보내줄 수 있음
원하는거 뽑아 쓸 수있음
Q. 근데 NoticeController에서가 아니라 Event에서 값을 가지고 오고 싶다면??
-> R은 패턴 쓰는 곳인데 저렇게 적으면 안되는
R은 저렇게
대신 L에서 줄지 말지 결정하도록 해야함. 가능함!
- 제목을 넘겨야할 페이지에서는 넘기고, 안넘길 페이지는 안넘기면 됨
detail 페이지에서는 제목 심어주고 나머지 페이지는 필요없음을 확인
대신 제목 안 주면, tiles에서 제목 안 받으면 기본값으로 뭘 줘야할지도 추가해줘야하고.
+ 추가로 필요한 라이브러리가 있음
// 라이브러리 하나만 추가해주면 된다.
이걸 누르면 목록이 촤~악 떠야지 다운받아진거...
나 어제 다운 안받아졌나보다 ㅜㅜ
dependencies
> tiles 검색 > org.apache... 가 공신력 있음 - el 라이브러리 추가 > 그럼 저절로 pom 에 추가가 된 것을 볼 수 있음
서버 재시작
cf) 근데 지금 라이브러리 너무 많아서 그런지 자꾸 다운됨
R에서 맨 아래거 우클릭해서 메모장으로 열어서 > 맨 아랫줄 지워주면 됨
- 저 의미는 : 설치된거 모두 한 번씩 훓어보라는(?) 거라서.
cf) 이전 tiles 코드
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<definition name="*.*.*" template="/WEB-INF/view/{1}/inc/layout.jsp">
<put-attribute name="header" value="/WEB-INF/view/inc/header.jsp" />
<put-attribute name="aside" value="/WEB-INF/view/{1}/inc/aside.jsp" />
<put-attribute name="main" value="/WEB-INF/view/{1}/{2}/{3}.jsp" />
<put-attribute name="footer" value="/WEB-INF/view/inc/footer.jsp" />
</definition>
</tiles-definitions>
Dispatcher Servlet 흐름 정말 쉽게 이해하기 (feat. 텔레토비 동산, 청소기, 콩자루) (0) | 2021.06.06 |
---|---|
74일 - tiles.xml에 preparer 기능 넣어 '디폴트값' 넣어주기 (with 'request에 값이 없을 때에만 되도록 조건문') (0) | 2021.06.04 |
73일 - Tiles 생성과 리졸빙 (0) | 2021.06.03 |
73일 - 경로를 값으로 받기, 파일 입출력, Tiles 개념 (0) | 2021.06.03 |
72일 - cookie (서블릿에서 vs Spring에서), 생명주기 영역, 가시 영역 (2) | 2021.06.02 |