예전에 사이드 프로젝트를 하다가 도중에 멈추고 진행하지 않던게 생갔났고 다시 한번 내가 만들어보고 싶은것( 기존에 하던 사이드 프로젝트) 를 하기 위해 타임리프를 다시공부 했다.
= 백엔드 서버에서 HTML을 동적으로 렌더링 하기위해 사용한다.
HTML 문서는 <,> 같은 특수문자 기반으로 정의된다.
웹 브라우저는 < , > 를 HTML 테그의 시작으로 인식한다. 따라서 <,>을 테그의 시작이 아닌 문자로 표현할수 있는 방법이 필요하다.
HTML 에서 사용하는 특수문자를 HTML 엔티티(문자)로 변경하는 것을 '이스케이프' 라 한다.
타임리프에서 변수를 사용할때 변수 표현식을 사용한다.
차례대로 객체,리스트,맵에서 데이터를 가져오는 방법인데 자바에 익숙하면 그리 어렵지 않다.
바로 요청 파라미터에 접근할수 있는 param,
세션접근 session
스프링 빈접근 @ 가 있다.
@{/hello/{param1}/{param2}(param1={param2})}
= /hello/data1/data2 // 경로상에 변수 있으면 () 안은 경로 변수처리
/hello 절대경로
hello 상대경로
,<, >=, <= .... ge,eq 삼항 연산자 등등 자바연산자와 99 프로 비슷함으로 생략한다.
th:attrappend : 속성 값의 뒤에 값을 추가한다.
th:attrprepend : 속성 값의 앞에 값을 추가한다.
th:classappend : class 속성에 자연스럽게 추가한다.
HTML 에서는 checked 가 false이건 true이건 checked (체크)처리 되어버림
th:checked 를 사용하면 checked 속성 자체를 제거해버림
마치 자바의 향상된 for문과 같다.
두번쨰파라미터에 값을 넣어 반복상태를 확인 할수있다. 생략 가능하며 생략시 지정한 변수명+stat으로 자동 지정
if/Unless/switch
조건에 충족하지 않을시 해당부분은 렌더링 되지 않고 사라진다
switch-case 부분도 자바와 매우 흡사.
case 부분에서 ${} 사용 x // * 은 만족하는 조건이 없을때 사용하는 디폴트
HTML의 태그가아닌 타임리프의 유일한 자체 태그
타임리프 특성상 태그안에 있어야 사용가능한데 애매한경우 블록을 써주도록 하자
인라인 사용전은 변수이름이 그대로 남아 있지만 개발자가 원하는것은 "변수" 일것이다. 인라인을 사용하면 이런문제를 해결 해준다.
자바스크립트에서 문제가 될수있는 문자가 포함되어 있으면 이스케이프 처리도 해준다.
웹페이지 개발시 공통된 부분들을 수정할경우 일일이 다 고칠수가 없다.
말그대로 그 부분, 그 조각을 가져온다는 뜻으로 알면 됀다.
th:fragment 부분은 이제 copy, copyParam(파라미터포함) 라는 이름을 가진 조각이라고 보면됀다.
template/ .... 이부분은 그 템플릿 조각들을 이름으로 불러오는 부분이다.
th:insert - 현제 태그 내부에 추가한다
th:replace - 현재 태그를 대체한다.
~{} 생략 가능
코드 조각을 레이아웃에 넘겨서 사용하는 방법
한부분은 공통으로 사용하는 부분을 사용하지만 다른 부분을 약간 추가하던가 변화를 주고싶을떄 사용
태그 부분을 해석해보면 해당 위치에 있는 common_header 조각을 불러오는데 파라미터로 현재 페이지에있는 title과 link를 넘겨준다는 뜻
이렇게 부분이 아닌 HTML 태그안에 fragment를 넣어주면 HTML을 통쨰변환도 가능하다.