下面列出了org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration#org.thymeleaf.TemplateEngine 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Test
public void astext() {
StringTemplateResolver templateResolver = new StringTemplateResolver();
templateResolver.setOrder(1);
templateResolver.setTemplateMode(TemplateMode.TEXT);
// TODO Cacheable or Not ?
templateResolver.setCacheable(false);
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
Context context = new Context();
context.setVariable("mavar","cela");
String process = templateEngine.process("ceci [[${mavar}]]", context);
assertThat(process).isEqualTo("ceci cela");
String notInterpreted = templateEngine.process("ceci <span th:text=\"${mavar}\"></span>", context);
assertThat(notInterpreted).isEqualTo("ceci <span th:text=\"${mavar}\"></span>");
}
public static void testB() {
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
//模板所在目录,相对于当前classloader的classpath。
resolver.setPrefix("static/");
///模板文件后缀
// resolver.setSuffix(".html");
// resolver.setCacheable(false);//设置不缓存
// resolver.setTemplateMode("HTML5");
TemplateEngine engine = new TemplateEngine();
engine.setTemplateResolver(resolver);
Context context = new Context();
context.setVariable("socketurl", "ws");
System.out.println(engine.process("websocket.html", context));
}
@Test
public void ashtml() {
StringTemplateResolver templateResolver = new StringTemplateResolver();
templateResolver.setOrder(1);
templateResolver.setTemplateMode(TemplateMode.HTML);
// TODO Cacheable or Not ?
templateResolver.setCacheable(false);
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
Context context = new Context();
context.setVariable("mavar","cela");
String process = templateEngine.process("ceci [[${mavar}]]", context);
assertThat(process).isEqualTo("ceci cela");
String variant = templateEngine.process("ceci <span th:text=\"${mavar}\"></span>", context);
assertThat(variant).isEqualTo("ceci <span>cela</span>");
}
private String getMailBodyFromTemplate(String templateName, Map<String, Object> vars){
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("email-templates/"); //模板所在目录,相对于当前classloader的classpath。
resolver.setSuffix(".html"); //模板文件后缀
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(resolver);
Context context = new Context();
for(Iterator<String> iterator = vars.keySet().iterator(); iterator.hasNext();){
String key = iterator.next();
context.setVariable(key, vars.get(key));
}
StringWriter writer = new StringWriter();
templateEngine.process("example", context, writer);
return writer.toString();
}
public SwaggerMappingSupport(ServletContext servletContext, String urlPatternMapping) throws ServletException {
this.contextPath = servletContext.getContextPath();
urlPrefix = contextPath + urlPatternMapping;
urlPrefix = urlPrefix.replaceAll("/{2,}", "/");
if (!"/".equals(urlPrefix) && urlPrefix.endsWith("/")) {
urlPrefix = urlPrefix.substring(0, urlPrefix.length() - 1);
}
requestMatchers = Arrays.stream(RESOURCE_PATTERNS)
.map(pattern -> String.join("/", this.contextPath, urlPatternMapping, pattern))
.map(pattern -> pattern.replaceAll("/{2,}", "/"))
.map(pattern -> new AntPathRequestMatcher(pattern, HttpMethod.GET.name()))
.collect(Collectors.toList());
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(SwaggerFilter.class.getClassLoader());
templateResolver.setPrefix(TEMPLATES_PATH + "/");
templateResolver.setTemplateMode(TemplateMode.HTML);
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
this.templateEngine = templateEngine;
}
@Test
public void oghamInWebContext() throws Exception {
contextRunner = contextRunner.withConfiguration(of(WebMvcAutoConfiguration.class, OghamSpringBoot2AutoConfiguration.class));
contextRunner.run((context) -> {
MessagingService messagingService = context.getBean(MessagingService.class);
checkEmail(messagingService);
checkSms(messagingService);
OghamInternalAssertions.assertThat(messagingService)
.sendGrid()
.apiKey(equalTo("ogham"))
.client(allOf(isA(SendGrid.class), not(isSpringBeanInstance(context, SendGrid.class))))
.and()
.thymeleaf()
.all()
.engine(isA(TemplateEngine.class))
.and()
.and()
.freemarker()
.all()
.configuration()
.defaultEncoding(equalTo(StandardCharsets.US_ASCII.name()));
});
}
@Test
public void oghamAlone() throws Exception {
context.register(OghamSpringBoot1AutoConfiguration.class);
context.refresh();
MessagingService messagingService = context.getBean(MessagingService.class);
checkEmail(messagingService);
checkSms(messagingService);
OghamInternalAssertions.assertThat(messagingService)
.sendGrid()
.apiKey(equalTo("ogham"))
.client(allOf(isA(SendGrid.class), not(isSpringBeanInstance(context, SendGrid.class))))
.and()
.thymeleaf()
.all()
.engine(isA(TemplateEngine.class))
.and()
.and()
.freemarker()
.all()
.configuration()
.defaultEncoding(equalTo(StandardCharsets.US_ASCII.name()));
}
@Test
public void oghamInWebContext() throws Exception {
context.register(WebMvcAutoConfiguration.class, OghamSpringBoot1AutoConfiguration.class);
context.refresh();
MessagingService messagingService = context.getBean(MessagingService.class);
checkEmail(messagingService);
checkSms(messagingService);
OghamInternalAssertions.assertThat(messagingService)
.sendGrid()
.apiKey(equalTo("ogham"))
.client(allOf(isA(SendGrid.class), not(isSpringBeanInstance(context, SendGrid.class))))
.and()
.thymeleaf()
.all()
.engine(isA(TemplateEngine.class))
.and()
.and()
.freemarker()
.all()
.configuration()
.defaultEncoding(equalTo(StandardCharsets.US_ASCII.name()));
}
@Override
public void init() {
// Setup ThymeLeaf
ServletContextTemplateResolver templateResolver =
new ServletContextTemplateResolver(this.getServletContext());
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
templateResolver.setCacheTTLMs(Long.valueOf(1200000L)); // TTL=20m
// Cache is set to true by default. Set to false if you want templates to
// be automatically updated when modified.
templateResolver.setCacheable(true);
templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
}
@Override
public void init() {
// Setup ThymeLeaf
ServletContextTemplateResolver templateResolver =
new ServletContextTemplateResolver(this.getServletContext());
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
templateResolver.setCacheTTLMs(1200000L); // TTL=20m
// Cache is set to true by default. Set to false if you want templates to
// be automatically updated when modified.
templateResolver.setCacheable(true);
templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
}
@Override
public void init() {
// Setup ThymeLeaf
ServletContextTemplateResolver templateResolver =
new ServletContextTemplateResolver(this.getServletContext());
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
templateResolver.setCacheTTLMs(Long.valueOf(1200000L)); // TTL=20m
// Cache is set to true by default. Set to false if you want templates to
// be automatically updated when modified.
templateResolver.setCacheable(true);
templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
}
/**
* Generates site report using thymeleaf template engine.
*
* @param diffReport
* container with parsed data.
* @param diffConfiguration
* merged configurations from both reports.
* @param paths
* CLI paths.
* @throws IOException
* on failure to write site to disc.
*/
public static void generate(DiffReport diffReport, MergedConfigurationModule diffConfiguration,
CliPaths paths) throws IOException {
// setup thymeleaf engine
final TemplateEngine tplEngine = getTemplateEngine();
// setup xreference generator
final XrefGenerator xrefGenerator = new XrefGenerator(paths.getRefFilesPath(),
paths.getOutputPath().resolve(Main.XREF_FILEPATH), paths.getOutputPath());
// html generation
final Path sitepath = paths.getOutputPath().resolve(SITEPATH);
final FileWriter writer = new FileWriter(sitepath.toString());
try {
// write statistics
generateHeader(tplEngine, writer, diffReport.getStatistics(), diffConfiguration);
// write parsed content
generateBody(tplEngine, writer, diffReport, paths, xrefGenerator);
// write html footer
tplEngine.process("footer", new Context(), writer);
}
finally {
writer.close();
}
}
@Test
public void testJavaScript() {
TemplateEngine engine = createWisdomEngine();
engine.initialize();
Context context = new Context();
context.setVariable("test", "test");
FakeRouter router = new FakeRouter();
Controller controller = new FakeController();
router.addController(controller);
Assets assets = mock(Assets.class);
context.setVariable(Routes.ROUTES_VAR, new Routes(router, assets, controller));
String processed = engine.process("templates/javascript.thl.html", context);
assertThat(processed).containsIgnoringCase("var t = 'test';");
assertThat(processed).containsIgnoringCase("var url = '/';");
assertThat(processed).containsIgnoringCase("$(document).ready(function () {");
}
@Bean
public TemplateEngine mailNotifierTemplateEngine() {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setApplicationContext(this.applicationContext);
resolver.setTemplateMode(TemplateMode.HTML);
resolver.setCharacterEncoding(StandardCharsets.UTF_8.name());
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.addTemplateResolver(resolver);
return templateEngine;
}
public static void main(String[] args) {
// 1.上下文
Context context = new Context();
//创建数据模型
Map<String, Object> dataModel = new HashMap<String, Object>(1);
dataModel.put("name", "青橙电商系统");
context.setVariables(dataModel);
// 2.准备文件
File dest = new File("d:/test_out.html");
// 3.生成页面
try {
PrintWriter writer = new PrintWriter(dest, "UTF-8");
//模板解析器
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
//模板模型
resolver.setTemplateMode(TemplateMode.HTML);
//后缀
resolver.setSuffix(".html");
//创建模板引擎
TemplateEngine engine = new TemplateEngine();
//设置模板解析器
engine.setTemplateResolver(resolver);
//执行模板引擎
engine.process("test", context, writer);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void setupThymeleaf() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setCacheable(false);
templateResolver.setCharacterEncoding(Charsets.UTF_8.name());
templateResolver.setTemplateMode(TemplateMode.HTML);
templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
final ShiroDialect dialect = new ShiroDialect();
templateEngine.addDialect(dialect.getPrefix(), dialect);
}
@Override
public String template(Object handleObject, ModelMap modelMap, String templateName) {
String controllerName = handleObject.getClass().getSimpleName();
String templateDirectory = controllerName.toLowerCase().substring(0, controllerName.length() - "handle".length());
templateResolver.setPrefix(this.getClass().getResource("/template/" + templateDirectory).getPath() + "/");
TemplateEngine engine = new TemplateEngine();
engine.setTemplateResolver(templateResolver);
Context context = new Context();
context.setVariables(modelMap);
return engine.process(templateName, context);
}
/**
* 使用 Thymeleaf 渲染 HTML
* @param template HTML模板
* @param params 参数
* @return 渲染后的HTML
*/
public static String render(String template,Map<String,Object> params){
Context context = new Context();
context.setVariables(params);
TemplateEngine engine=new TemplateEngine();
StringTemplateResolver resolver = new StringTemplateResolver();
engine.setTemplateResolver(resolver);
return engine.process(template,context);
}
private TemplateUtils() {
StringTemplateResolver templateResolver = new StringTemplateResolver();
templateResolver.setTemplateMode(TemplateMode.HTML);
// TODO Cacheable or Not ?
templateResolver.setCacheable(false);
stringTemplateEngine = new TemplateEngine();
stringTemplateEngine.addTemplateResolver(templateResolver);
}
/**
* Formate common fix body.
*
* @param silentautoFixTrans the silentauto fix trans
* @param ruleParam the rule param
* @param resourceOwner the resource owner
* @return the string
*/
public static String formateCommonFixBody(List<AutoFixTransaction> silentautoFixTrans,Map<String, String> ruleParam,ResourceOwner resourceOwner) {
TemplateEngine templateEngine = new TemplateEngine();
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setTemplateMode("HTML");
templateResolver.setSuffix(".html");
templateEngine.setTemplateResolver(templateResolver);
List<String> columnsList = Arrays.asList(CommonUtils.getPropValue(PacmanSdkConstants.PACMAN_MAIL_TEMPLATE_COLUMNS
+ ruleParam.get(PacmanSdkConstants.RULE_ID)).split("\\s*,\\s*"));
Context context = new Context();
context.setVariable("columns", columnsList);
context.setVariable("resources", silentautoFixTrans);
String policyUrl = getPolicyKnowledgeBasePathURL(ruleParam);
String name =CommonUtils.getPropValue(PacmanSdkConstants.SEND_EMAIL_SILENT_FIX_ADMIN
+ ruleParam.get(PacmanSdkConstants.RULE_ID));
if(StringUtils.isNullOrEmpty(name)){
name = resourceOwner.getName();
}
String postFixMessage = CommonUtils.getPropValue(PacmanSdkConstants.EMAIL_FIX_MESSAGE_PREFIX
+ ruleParam.get(PacmanSdkConstants.RULE_ID));
context.setVariable("AUTOFIX_POST_FIX_MESSAGE", postFixMessage);
context.setVariable("POLICY_URL", policyUrl);
context.setVariable("NAME", "Hello "+name);
context.setVariable("RESOURCE_TYPE", " Resource Type : "+ruleParam.get(PacmanSdkConstants.TARGET_TYPE));
context.setVariable("AUTO_FIX_APPLIED", "Total AutoFixs Applied : "+silentautoFixTrans.size());
StringWriter writer = new StringWriter();
if(CommonUtils.getPropValue("pacman.auto.fix.common.email.notifications."
+ ruleParam.get(PacmanSdkConstants.RULE_ID)).equals("commonTemplate")){
templateEngine.process("/template/autofix-user-notification-action-common.html", context, writer);
}else{
templateEngine.process("/template/autofix-silent-autodelete-usernotification-info.html", context, writer);
}
return writer.toString();
}
@PostConstruct
public void postConstruct() {
final ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(servletContext);
resolver.setPrefix("/WEB-INF/layouts/");
resolver.setSuffix(".html");
resolver.setTemplateMode(TemplateMode.HTML);
resolver.setCacheable(false);
engine = new TemplateEngine();
engine.setTemplateResolver(resolver);
}
ThymeleafResolver() {
this.templateEngine = new TemplateEngine();
ResourceTemplateResolver templateResolver = new ResourceTemplateResolver(
WebConfigKeys.VIEW_PREFIX_THYMELEAF.getValue());
templateResolver.setCacheable(WebConfigKeys.VIEW_CACHE.castValue(boolean.class));
this.templateEngine.setTemplateResolver(templateResolver);
}
@Produces
@ViewEngineConfig
public TemplateEngine getTemplateEngine() {
ITemplateResolver resolver = new ServletContextTemplateResolver(this.servletContext);
TemplateEngine engine = new TemplateEngine();
engine.setTemplateResolver(resolver);
return engine;
}
@PostConstruct
public void init() {
AbstractConfigurableTemplateResolver resolver = new JessieFileTemplateResolver(filesLocator);
resolver.setTemplateMode("TEXT");
engine = new TemplateEngine();
engine.setTemplateResolver(resolver);
}
private void templateInit() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setTemplateMode(TemplateMode.TEXT);
templateResolver.setPrefix("/templates/");
templateResolver.setSuffix(".md");
templateResolver.setCacheable(false);
templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
}
private String parseThymeleafTemplate() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
Context context = new Context();
context.setVariable("to", "Baeldung.com");
return templateEngine.process("thymeleaf_template", context);
}
public HTMLReportWriter(FileService fileService) {
this.fileService = fileService;
templateResolver.setTemplateMode("HTML");
templateResolver.setPrefix("templates/");
templateResolver.setSuffix(".html");
templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
}
@Bean
public ThymeleafTemplateEngine getTemplateEngine() {
ThymeleafTemplateEngine thymeleafTemplateEngine = ThymeleafTemplateEngine.create(vertx);
TemplateEngine templateEngine = thymeleafTemplateEngine.getDelegate().getThymeleafTemplateEngine();
// set template resolvers
DomainBasedTemplateResolver overrideTemplateResolver = (DomainBasedTemplateResolver) overrideTemplateResolver();
overrideTemplateResolver.setTemplateEngine(templateEngine);
templateEngine.setTemplateResolver(overrideTemplateResolver);
templateEngine.addTemplateResolver(defaultTemplateResolver());
return thymeleafTemplateEngine;
}
@Produces
@ViewEngineConfig
public TemplateEngine getTemplateEngine() {
ITemplateResolver resolver = new ServletContextTemplateResolver(this.servletContext);
TemplateEngine engine = new TemplateEngine();
engine.setTemplateResolver(resolver);
return engine;
}
private TemplateEngine getTemplateEngine(TemplateMode templateMode) {
if (templateMode.equals(TemplateMode.HTML)) {
return htmlTemplateEngine.getTemplateEngine();
} else {
return textTemplateEngine.getTemplateEngine();
}
}