From 68d5cf35d4df7041148d635e8db24ec738d8be72 Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 28 Mar 2021 14:02:28 +0800 Subject: [PATCH] add wit support --- .../template/engine/enjoy/EnjoyEngine.java | 5 ++- .../extra/template/engine/wit/WitEngine.java | 35 +++++++++++++++++-- .../extra/template/TemplateUtilTest.java | 16 +++++++-- 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/enjoy/EnjoyEngine.java b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/enjoy/EnjoyEngine.java index 2c2546012..59c1c815e 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/enjoy/EnjoyEngine.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/enjoy/EnjoyEngine.java @@ -9,6 +9,8 @@ import cn.hutool.extra.template.TemplateConfig.ResourceMode; import cn.hutool.extra.template.TemplateEngine; import com.jfinal.template.source.FileSourceFactory; +import java.io.File; + /** * Enjoy库的引擎包装 * @@ -99,7 +101,8 @@ public class EnjoyEngine implements TemplateEngine { break; case WEB_ROOT: engine.setSourceFactory(new FileSourceFactory()); - engine.setBaseTemplatePath(FileUtil.getAbsolutePath(FileUtil.getWebRoot())); + final File root = FileUtil.file(FileUtil.getWebRoot(), config.getPath()); + engine.setBaseTemplatePath(FileUtil.getAbsolutePath(root)); break; default: break; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/wit/WitEngine.java b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/wit/WitEngine.java index 565294642..07ebb573b 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/wit/WitEngine.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/wit/WitEngine.java @@ -1,11 +1,16 @@ package cn.hutool.extra.template.engine.wit; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.lang.Dict; import cn.hutool.extra.template.Template; import cn.hutool.extra.template.TemplateConfig; import cn.hutool.extra.template.TemplateEngine; import cn.hutool.extra.template.TemplateException; import org.febit.wit.Engine; import org.febit.wit.exceptions.ResourceNotFoundException; +import org.febit.wit.util.Props; + +import java.io.File; /** * Wit(http://zqq90.github.io/webit-script/)模板引擎封装 @@ -75,10 +80,34 @@ public class WitEngine implements TemplateEngine { * @return {@link Engine} */ private static Engine createEngine(TemplateConfig config) { - if (null == config) { - config = TemplateConfig.DEFAULT; + final Props configProps = Engine.createConfigProps(""); + Dict dict = null; + + if (null != config) { + dict = Dict.create(); + // 自定义编码 + dict.set("DEFAULT_ENCODING", config.getCharset()); + + switch (config.getResourceMode()){ + case CLASSPATH: + configProps.set("pathLoader.root", config.getPath()); + configProps.set("routeLoader.defaultLoader", "classpathLoader"); + break; + case STRING: + configProps.set("routeLoader.defaultLoader", "stringLoader"); + break; + case FILE: + configProps.set("pathLoader.root", config.getPath()); + configProps.set("routeLoader.defaultLoader", "fileLoader"); + break; + case WEB_ROOT: + final File root = FileUtil.file(FileUtil.getWebRoot(), config.getPath()); + configProps.set("pathLoader.root", FileUtil.getAbsolutePath(root)); + configProps.set("routeLoader.defaultLoader", "fileLoader"); + break; + } } - return Engine.create(); + return Engine.create(configProps,dict); } } diff --git a/hutool-extra/src/test/java/cn/hutool/extra/template/TemplateUtilTest.java b/hutool-extra/src/test/java/cn/hutool/extra/template/TemplateUtilTest.java index 229e7c62d..c7db4fa11 100644 --- a/hutool-extra/src/test/java/cn/hutool/extra/template/TemplateUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/template/TemplateUtilTest.java @@ -157,10 +157,20 @@ public class TemplateUtilTest { @Test public void WitEngineTest() { - TemplateEngine engine = TemplateUtil.createEngine( - new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(WitEngine.class)); - Template template = engine.getTemplate("/templates/wit_test.wit"); + //classpath模板 + TemplateConfig config = new TemplateConfig("templates", ResourceMode.CLASSPATH) + .setCustomEngine(WitEngine.class); + TemplateEngine engine = TemplateUtil.createEngine(config); + Template template = engine.getTemplate("/wit_test.wit"); String result = template.render(Dict.create().set("name", "hutool")); Assert.assertEquals("hello,hutool", StrUtil.trim(result)); + + // 字符串模板 + config = new TemplateConfig("templates", ResourceMode.STRING) + .setCustomEngine(WitEngine.class); + engine = TemplateUtil.createEngine(config); + template = engine.getTemplate("<%var name;%>hello,${name}"); + result = template.render(Dict.create().set("name", "hutool")); + Assert.assertEquals("hello,hutool", StrUtil.trim(result)); } }