Spring boot 에서 Custom Helper를 등록하는 방법과, 사용법을 알아보도록 하겠습니다.
Spring boot 에서 handlebars custom helper 사용법
1. 의존성 추가
x
dependencies { // https://mvnrepository.com/artifact/pl.allegro.tech.boot/handlebars-spring-boot-starter compile 'pl.allegro.tech.boot:handlebars-spring-boot-starter:0.3.0' ...}build.gradle 파일에 위의 의존성을 추가합니다.
2. Custom Helper 추가
xxxxxxxxxxpublic class CustomHelper { ... helper 메소드}Spring boot에서 custom helper를 추가하기는 굉장히 쉽습니다. class 파일을 만들고, class level에 @HandlebarsHelper 어노테이션을 추가하고, 해당 클래스를 bean으로 등록하면 끝입니다.
3. Custom Helper 메소드 추가
3.1 문자열 출력 helper
x
public class CustomHelper { public CharSequence greet() { return "HI"; }}간단히 문자열을 출력하기 위한 helper메소드는 CharSequence 를 반환하는 메소드를 만들기만 하면 됩니다.
템플릿 엔진이 해당 헬퍼를 인식하는 방법은 {{메소드이름}} 입니다.
또한 해당 헬퍼를 통해 html에 뿌려질 데이터는 메소드가 반환하는 문자열 입니다.
HTML
x
<html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> {{greet}}</body></html>
결과
3.2 HTML 반환 helper
때로는 helper를 통해서, html을 출력하도록 해야할 때도 있습니다. 이때는 SafeString을 반환하도록 하면 됩니다.
xxxxxxxxxxpublic class CustomHelper { public Handlebars.SafeString html() { return new Handlebars.SafeString("<div><a href='#'> HTML </a></div>"); }}위와 같이 반환 타입을 SafeString으로 하며, return 값역시, SafeString을 반환하되, 매개변수로 html코드를 문자열 타입으로 입력해주면 됩니다.
HTML
xxxxxxxxxx<html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> {{html}}</body></html>
결과
4. Helper 메소드에 매개변수 넘겨주기
4.1 기본 타입
xxxxxxxxxx<html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> {{greet "param1" 2}}</body></html>매개변수를 넘겨주는 방법은 간단합니다. html에서 helper를 사용시 공백을 구분자로 하여, 매개변수를 전달하면 됩니다. 위의 경우 helper에 "param1", 2 를 전달합니다.
x
public class CustomHelper { public CharSequence greet(String param1, int param2) { return "HI " + param1 + param2; }}helper 메소드에 위와 같이 타입에 맞게 매개변수를 추가해주면 됩니다.
결과
4.2 객체
xxxxxxxxxxpublic class Child { public String name; public Child(String name) { this.name = name; }}우선 model에 담아줄 클래스를 생성합니다.
xxxxxxxxxxpublic class TestController { ("/test") public String greet(Model model) { model.addAttribute("child", new Child("c1")); return "test"; }}controller에서 model에 child 객체를 담아줍니다.
xxxxxxxxxxpublic class CustomHelper { public CharSequence child(Child child) { return "hi " + child.name; }}helper에서는 매개변수로 Child타입을 받도록 하면 됩니다.
x
<html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> {{child child}}</body></html>객체를 매개변수로 넘길때에는, model에 담긴 객체의 키값을 그냥 전달해주기만 하면 됩니다.
결과
4.3 리스트에 담긴 객체
<html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> {{#each children}} {{children this}} {{/each}}</body></html>List에 담긴 객체를 파라미터로 넘길 때에는 each 안에서 this를 이용하면 됩니다.