mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
fix Velocity bug
This commit is contained in:
parent
84494f4ef2
commit
f49c3cba6e
@ -24,6 +24,7 @@
|
|||||||
* 【poi 】 修复ExcelBase.isXlsx方法判断问题(issue#I1S502@Gitee)
|
* 【poi 】 修复ExcelBase.isXlsx方法判断问题(issue#I1S502@Gitee)
|
||||||
* 【poi 】 修复Excel03SaxReader日期方法判断问题(pr#1026@Github)
|
* 【poi 】 修复Excel03SaxReader日期方法判断问题(pr#1026@Github)
|
||||||
* 【core 】 修复StrUtil.indexOf空指针问题(issue#1038@Github)
|
* 【core 】 修复StrUtil.indexOf空指针问题(issue#1038@Github)
|
||||||
|
* 【extra 】 修复VelocityEngine编码问题和路径前缀问题(issue#I1T0IG@Gitee)
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -333,7 +333,7 @@ public class BeanDesc implements Serializable {
|
|||||||
// ------------------------------------------------------------------------------------------------------ Private method end
|
// ------------------------------------------------------------------------------------------------------ Private method end
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 属性描述
|
* 属性描述,包括了字段、getter、setter和相应的方法执行
|
||||||
*
|
*
|
||||||
* @author looly
|
* @author looly
|
||||||
*/
|
*/
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
package cn.hutool.extra.template.engine.velocity;
|
package cn.hutool.extra.template.engine.velocity;
|
||||||
|
|
||||||
import org.apache.velocity.app.Velocity;
|
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.extra.template.Template;
|
import cn.hutool.extra.template.Template;
|
||||||
import cn.hutool.extra.template.TemplateConfig;
|
import cn.hutool.extra.template.TemplateConfig;
|
||||||
import cn.hutool.extra.template.TemplateEngine;
|
import cn.hutool.extra.template.TemplateEngine;
|
||||||
|
import org.apache.velocity.app.Velocity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Velocity模板引擎
|
* Velocity模板引擎
|
||||||
@ -16,6 +15,7 @@ import cn.hutool.extra.template.TemplateEngine;
|
|||||||
public class VelocityEngine implements TemplateEngine {
|
public class VelocityEngine implements TemplateEngine {
|
||||||
|
|
||||||
private org.apache.velocity.app.VelocityEngine engine;
|
private org.apache.velocity.app.VelocityEngine engine;
|
||||||
|
private TemplateConfig config;
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------- Constructor start
|
// --------------------------------------------------------------------------------- Constructor start
|
||||||
/**
|
/**
|
||||||
@ -47,6 +47,7 @@ public class VelocityEngine implements TemplateEngine {
|
|||||||
if(null == config){
|
if(null == config){
|
||||||
config = TemplateConfig.DEFAULT;
|
config = TemplateConfig.DEFAULT;
|
||||||
}
|
}
|
||||||
|
this.config = config;
|
||||||
init(createEngine(config));
|
init(createEngine(config));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -74,7 +75,25 @@ public class VelocityEngine implements TemplateEngine {
|
|||||||
if(null == this.engine){
|
if(null == this.engine){
|
||||||
init(TemplateConfig.DEFAULT);
|
init(TemplateConfig.DEFAULT);
|
||||||
}
|
}
|
||||||
return VelocityTemplate.wrap(engine.getTemplate(resource));
|
|
||||||
|
// 目录前缀
|
||||||
|
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));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -98,7 +117,9 @@ public class VelocityEngine implements TemplateEngine {
|
|||||||
// loader
|
// loader
|
||||||
switch (config.getResourceMode()) {
|
switch (config.getResourceMode()) {
|
||||||
case CLASSPATH:
|
case CLASSPATH:
|
||||||
ve.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
|
// 新版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;
|
break;
|
||||||
case FILE:
|
case FILE:
|
||||||
// path
|
// path
|
||||||
|
@ -1,13 +1,5 @@
|
|||||||
package cn.hutool.extra.template;
|
package cn.hutool.extra.template;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Ignore;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import cn.hutool.core.lang.Dict;
|
import cn.hutool.core.lang.Dict;
|
||||||
import cn.hutool.extra.template.TemplateConfig.ResourceMode;
|
import cn.hutool.extra.template.TemplateConfig.ResourceMode;
|
||||||
import cn.hutool.extra.template.engine.beetl.BeetlEngine;
|
import cn.hutool.extra.template.engine.beetl.BeetlEngine;
|
||||||
@ -16,6 +8,13 @@ import cn.hutool.extra.template.engine.freemarker.FreemarkerEngine;
|
|||||||
import cn.hutool.extra.template.engine.rythm.RythmEngine;
|
import cn.hutool.extra.template.engine.rythm.RythmEngine;
|
||||||
import cn.hutool.extra.template.engine.thymeleaf.ThymeleafEngine;
|
import cn.hutool.extra.template.engine.thymeleaf.ThymeleafEngine;
|
||||||
import cn.hutool.extra.template.engine.velocity.VelocityEngine;
|
import cn.hutool.extra.template.engine.velocity.VelocityEngine;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Ignore;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模板引擎单元测试
|
* 模板引擎单元测试
|
||||||
@ -99,10 +98,13 @@ public class TemplateUtilTest {
|
|||||||
//ClassPath模板
|
//ClassPath模板
|
||||||
engine = TemplateUtil.createEngine(
|
engine = TemplateUtil.createEngine(
|
||||||
new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(VelocityEngine.class));
|
new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(VelocityEngine.class));
|
||||||
|
template = engine.getTemplate("velocity_test.vtl");
|
||||||
|
result = template.render(Dict.create().set("name", "hutool"));
|
||||||
|
Assert.assertEquals("你好,hutool", result);
|
||||||
|
|
||||||
template = engine.getTemplate("templates/velocity_test.vtl");
|
template = engine.getTemplate("templates/velocity_test.vtl");
|
||||||
result = template.render(Dict.create().set("name", "hutool"));
|
result = template.render(Dict.create().set("name", "hutool"));
|
||||||
Assert.assertEquals("你好,hutool", result);
|
Assert.assertEquals("你好,hutool", result);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
package cn.hutool.extra.template;
|
||||||
|
|
||||||
|
import cn.hutool.core.lang.Dict;
|
||||||
|
import cn.hutool.core.util.CharsetUtil;
|
||||||
|
import cn.hutool.extra.template.engine.velocity.VelocityEngine;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class VelocityTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void charsetTest(){
|
||||||
|
final TemplateConfig config = new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH);
|
||||||
|
config.setCustomEngine(VelocityEngine.class);
|
||||||
|
config.setCharset(CharsetUtil.CHARSET_GBK);
|
||||||
|
final TemplateEngine engine = TemplateUtil.createEngine(config);
|
||||||
|
Template template = engine.getTemplate("velocity_test_gbk.vtl");
|
||||||
|
String result = template.render(Dict.create().set("name", "hutool"));
|
||||||
|
Assert.assertEquals("你好,hutool", result);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
ÄăşĂ,$name
|
Loading…
x
Reference in New Issue
Block a user