All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hutool.extra.template.engine.velocity.VelocityEngine Maven / Gradle / Ivy

There is a newer version: 5.8.33
Show newest version
package cn.hutool.extra.template.engine.velocity;

import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateEngine;
import org.apache.velocity.app.Velocity;

/**
 * Velocity模板引擎
* 见:http://velocity.apache.org/ * * @author looly */ public class VelocityEngine implements TemplateEngine { private org.apache.velocity.app.VelocityEngine engine; private TemplateConfig config; // --------------------------------------------------------------------------------- Constructor start /** * 默认构造 */ public VelocityEngine() { } /** * 构造 * * @param config 模板配置 */ public VelocityEngine(TemplateConfig config) { init(config); } /** * 构造 * * @param engine {@link org.apache.velocity.app.VelocityEngine} */ public VelocityEngine(org.apache.velocity.app.VelocityEngine engine) { init(engine); } // --------------------------------------------------------------------------------- Constructor end @Override public TemplateEngine init(TemplateConfig config) { if (null == config) { config = TemplateConfig.DEFAULT; } this.config = config; init(createEngine(config)); return this; } /** * 初始化引擎 * * @param engine 引擎 */ private void init(org.apache.velocity.app.VelocityEngine engine) { this.engine = engine; } /** * 获取原始的引擎对象 * * @return 原始引擎对象 * @since 5.5.8 */ public org.apache.velocity.app.VelocityEngine getRawEngine() { return this.engine; } @Override public Template getTemplate(String resource) { if (null == this.engine) { init(TemplateConfig.DEFAULT); } // 目录前缀 String root; // 自定义编码 String charsetStr = null; if (null != this.config) { root = this.config.getPath(); charsetStr = this.config.getCharsetStr(); // 修正template目录,在classpath或者web_root模式下,按照配置添加默认前缀 // 如果用户已经自行添加了前缀,则忽略之 final TemplateConfig.ResourceMode resourceMode = this.config.getResourceMode(); if (TemplateConfig.ResourceMode.CLASSPATH == resourceMode || TemplateConfig.ResourceMode.WEB_ROOT == resourceMode) { resource = StrUtil.addPrefixIfNot(resource, StrUtil.addSuffixIfNot(root, "/")); } } return VelocityTemplate.wrap(engine.getTemplate(resource, charsetStr)); } /** * 创建引擎 * * @param config 模板配置 * @return {@link org.apache.velocity.app.VelocityEngine} */ private static org.apache.velocity.app.VelocityEngine createEngine(TemplateConfig config) { if (null == config) { config = new TemplateConfig(); } final org.apache.velocity.app.VelocityEngine ve = new org.apache.velocity.app.VelocityEngine(); // 编码 final String charsetStr = config.getCharset().toString(); ve.setProperty(Velocity.INPUT_ENCODING, charsetStr); // ve.setProperty(Velocity.OUTPUT_ENCODING, charsetStr); ve.setProperty(Velocity.FILE_RESOURCE_LOADER_CACHE, true); // 使用缓存 // loader switch (config.getResourceMode()) { case CLASSPATH: // 新版Velocity弃用 // ve.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); ve.setProperty("resource.loader.file.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); break; case FILE: // path final String path = config.getPath(); if (null != path) { ve.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path); } break; case WEB_ROOT: ve.setProperty(Velocity.RESOURCE_LOADERS, "webapp"); ve.setProperty("webapp.resource.loader.class", "org.apache.velocity.tools.view.servlet.WebappLoader"); ve.setProperty("webapp.resource.loader.path", StrUtil.nullToDefault(config.getPath(), StrUtil.SLASH)); break; case STRING: ve.setProperty(Velocity.RESOURCE_LOADERS, "str"); ve.setProperty("resource.loader.str.class", SimpleStringResourceLoader.class.getName()); break; default: break; } ve.init(); return ve; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy