Spring BootおよびMoustache –デフォルト値
Spring
Boot + Mustacheテンプレート環境では、Mustacheのページで{{variable}}に値を割り当てなかった場合、jmustacheは次のエラーメッセージをスローします。
com.samskivert.mustache.MustacheException$Context: No method or field with name 'variable' on line xx
at com.samskivert.mustache.Template.checkForMissing(Template.java:316) ~[jmustache-1.13.jar:na]
at com.samskivert.mustache.Template.getValue(Template.java:224) ~[jmustache-1.13.jar:na]
at com.samskivert.mustache.Template.getValueOrDefault(Template.java:269) ~[jmustache-1.13.jar:na]
P.S Tested with Spring Boot 1.5.2.RELEASE
解決策1
変数がオプションの場合、次のようにラップしてみてください。
{{#variable}}
{{.}}
{{/variable}}
解決策2
または、Spring Bootで、Mustache.Compilerをオーバーライドして、デフォルト値をグローバルに提供します。
SpringBootWebApplication.java
package com.hostingcompass.web;
import com.samskivert.mustache.Mustache;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.mustache.MustacheEnvironmentCollector;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.env.Environment;
@SpringBootApplication
@ComponentScan({"com.example"})
public class SpringBootWebApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootWebApplication.class, args);
}
//Override MustacheAutoConfiguration to support defaultValue("")
@Bean
public Mustache.Compiler mustacheCompiler(Mustache.TemplateLoader mustacheTemplateLoader,
Environment environment) {
MustacheEnvironmentCollector collector = new MustacheEnvironmentCollector();
collector.setEnvironment(environment);
// default value
Mustache.Compiler compiler = Mustache.compiler().defaultValue("")
.withLoader(mustacheTemplateLoader)
.withCollector(collector);
return compiler;
}
}