본문 바로가기
Development/Spring Framework

mustache 문법 + 스프링 연동

by 신군. 2018. 7. 5.
반응형
mustache 문법 + 스프링 연동


머스터치
공식 : https://mustache.github.io/
데모 : https://mustache.github.io/#demo
- {{ }} 을 통해 빠른 치환
장점
- 웬만한 플랫폼을 모두 지원한다.
- 속도가 빠르다.
단점
- 플랫폼 공용으로 만들어졌기에 스프링 같은 곳에서 쓰기위해서는 모두 모델안에 넣어줘야한다.
- 상위를 선택하는 방법이 한정적임.


문법
예제 데이터
  1. {
  2. "header": "Colors",
  3. "items": [
  4. {"name": "red", "first": true, "url": "#Red"},
  5. {"name": "green", "link": true, "url": "#Green"},
  6. {"name": "blue", "link": true, "url": "#Blue"}
  7. ],
  8. "empty": false
  9. }
출력
  1. {{ header }}
IF
- NOT (^)을 제외하면 루프와 동일
- (^) 제외시 IF 개념이 아니라 반복 이지만 이해를 돕기위한 설명입니다.
  1. {{# header }}
  2. 해더가 존재함
  3. {{/ header }}
  1. {{^ header }}
  2. 해더가 존재하지 않음
  3. {{/ header }}
  1. {{^ header333 }}
  2. 해더333 존재하지 않음
  3. {{/ header333 }}
내부출력 - 자기자신
  1. {{# header }}
  2. 해드의 값은 {{.}}
  3. {{/ header }}
루프 : 사실상 위 IF 가 루프를 통하고있다.
- 즉 배열형이면 루프를 돌며 출력되며, 배열이 아닌 값이면 단일 출력이되며, 값이 없으면 출력되지않음.
  1. {{#items}}
  2. {{#first}}
  3. <li><strong>{{name}}</strong></li>
  4. {{/first}}
  5. {{#link}}
  6. <li><a href="{{url}}">{{name}}</a></li>
  7. {{/link}}
  8. {{/items}}
주석
  1. {{! 이렇게하면 주석이 됩니다. }}
상위선택
- 상위를 선택하는 문법이 한정적임
- 이렇게 사용할 경우 items 안에 해더가 없을때 한단계 위 해더가 선택된다.
- 단계별로 올라가도 끝내 해더가 나오지 않을 경우 빈값
  1. {{#items}}
  2. {{header }}
  3. {{/items}}
포함 : include
- 해당 경로에 있는 템플릿을 결합합니다.
  1. {{>경로}}


스프링에서 적용하기
메이븐 추가
  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-mustache</artifactId>
  4. </dependency>
src/main/resources/templates/test.html
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8"/>
  5. <title>{{ title }}</title>
  6. </head>
  7. <body>
  8. <div>
  9. {{ msg }}
  10. </div>
  11. </body>
  12. </html>
컨트롤러
  1. @RequestMapping("/")
  2. public String root(Model model)
  3. {
  4. model.setAttribute("title", "타이틀 테스트");
  5. model.setAttribute("msg", "Hello!!");
  6. return "test";
  7. }

연동이 안되는 경우는 아래와 같이 리졸버를 등록해보세요.
  1. @Configuration
  2. public class WebConfiguration implements WebMvcConfigurer {
  3. @Override
  4. public void configureViewResolvers(ViewResolverRegistry registry) {
  5. MustacheViewResolver resolver = new MustacheViewResolver();
  6.  
  7. resolver.setCharset("UTF-8");
  8. resolver.setContentType("text/html;charset=UTF-8");
  9. resolver.setPrefix("classpath:/templates/");
  10. resolver.setSuffix(".html");
  11.  
  12. registry.viewResolver(resolver);
  13. }
  14. }


반응형