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 추가
xxxxxxxxxx
public 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
을 반환하도록 하면 됩니다.
xxxxxxxxxx
public 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 객체
xxxxxxxxxx
public class Child {
public String name;
public Child(String name) {
this.name = name;
}
}
우선 model에 담아줄 클래스를 생성합니다.
xxxxxxxxxx
public class TestController {
"/test") (
public String greet(Model model) {
model.addAttribute("child", new Child("c1"));
return "test";
}
}
controller에서 model에 child
객체를 담아줍니다.
xxxxxxxxxx
public 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
를 이용하면 됩니다.