[Handlebar] config 및 handler 적용
Handlebar 설치
// build.gradle
compile ('pl.allegro.tech.boot:handlebars-spring-boot-starter:0.3.2')
compile 'com.github.jknack:handlebars-helpers:4.2.0',
'com.github.jknack:handlebars-jackson2:4.2.0',
'com.github.jknack:handlebars-humanize:4.2.0',
'com.github.jknack:handlebars-markdown:4.2.0'
Handlebar config
// HandlebarConfig.java
@Configuration
public class HandlebarConfig{
@Autowired
LoginAdminHelper loginAdminHelper;
@Autowired
EqualHelper equalHelper;
@Bean
public HandlebarsViewResolver viewResolver() throws Exception{
HandlebarsViewResolver viewResolver = new HandlebarsViewResolver();
viewResolver.setOrder(1);
viewResolver.setPrefix("classpath:/templates"); // 기본값이 classpath:/templates 라고 되어 있긴 함
viewResolver.setSuffix(".hbs"); // 기본값이 .hbs라고 되어 있긴 함
viewResolver.registerHelpers(loginAdminHelper); // loginAdminHelper에는 메소드가 여러개 있으며 각 메소드의 이름이 helper의 이름이 된다.
viewResolver.registerHelper("equal", equalHelper); // equal이라는 helper 이름으로 equalHelper의 클래스가 등록된다.
viewResolver.setCache(false); // 캐시 사용 여부
viewResolver.setBindI18nToMessageSource(true); // true라면 ResourceBundle 대신 MessageSource를 사용한다.
return viewResolver;
}
}
// LoginAdminHelper.java
@HandlebarsHelper
@Component
public class LoginAdminHelper{
@Autowired
private HttpSession session;
@Autowired
@Qualifier("AllRoleMap")
private Map<com.code.Role, Map<String, AdminRoleDto>> allRoleMap;
@Autowired
private SettingsService settingsService;
public CharSequence greet() { return "Hello World"; } // handler에서 {{greet}}로 사용
public boolean hasRole(String params1, String params2){ // handler에서 {{#if (hasRole param1 param2)}} 으로 사용
String code = params1;
try{
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if(principal == null || "anonymousUser".equals(principal)) return false;
CustomUserDetails userDetails = (CustomUserDetails)principal;
String roleName = userDetails.getRoleName();
if(ToolUtils.isNullOrEmpty(roleName)) return false;
Role role = Role.valueOf(roleName);
if(role == null) return false;
Map<String, AdminRoleDto> roleInfoMap = allRoleMap.get(role);
AdminRoleDto roleInfo = roleInfoMap.get(code);
if(roleInfo == null){
return false;
}
String type = "0";
if(params2 != null){
type = params2;
}
if("0".equals(type)){
return "Y".equals(roleInfo.getReadYn());
}else{
return "Y".equals(roleInfo.getCudYn());
}
}catch(Exception e){
return false;
}
}
public boolean loginAuthType(){ // handler에서 {{loginAuthType}} 으로 사용
SystemSettings settings = settingsService.getValue(SiteExtName.SETTINGS_ADMIN_LOGIN_TYPE);
return LoginAuthType.fromCode(settings.getValue()).getCode();
}
}
// EqualHelper.java
@Component
@HandlebarsHelper
public class EqualHelper implements Helper<Object>{
public static final String NAME = "equal";
@Override
public Object apply(Object context, Options options) throws IOException{
String arg1, arg2;
if(null == context || null == options){
throw new IllegalArgumentException("Parameter is empty");
}
arg1 = context.toString();
arg2 = options.param(0).toString(); // options는 여러개 받을 수 있음. {{#if (equal "test" "test1" "test2"}} 로 값을 넘길 경우 options.param(0)="test1", options.param(1)="test2"
return arg1.equals(arg2);
}
}
Author And Source
이 문제에 관하여([Handlebar] config 및 handler 적용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bey1548/Handlebar-config-및-handler-적용저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)