当前位置: 首页 > 软件库 > 程序开发 > 模板引擎 >

min-velocity

简化 velocity ​模板引擎
授权协议 Apache
开发语言 Java
所属分类 程序开发、 模板引擎
软件类型 开源软件
地区 国产
投 递 者 冉绯辞
操作系统 跨平台
开源组织 阿里巴巴
适用人群 未知
 软件概览

min-velocity 是一个专为代码生成而定制的简化 velocity 模板引擎。

目标:

以 velocity 1.7 为基础, 裁剪出适合用作代码生成的模板引擎

裁剪:

  • 没有event机制

  • 没有macro

  • 没有stop

  • 没有evaluate

  • 没有define

  • 没有break

改动:

  • requires jdk1.5+

  • 默认情况下,不打印任何日志

  • 默认采用classpath模板加载器而非文件系统模板加载器

  • default I/O encoding changed to UTF-8(from iso-8859-1)

  • 对于#set指令,默认允许设置null值

  • 默认打开resource cache

  • 去掉了parser pool

  • #parse和#include标签支持相对路径

  • 新增$ParseUtil.recParsing("xxx.vm").addParam("key", val)模板调用形式;相当于带调用栈的#parse标签,能用在当你需要每层递归的context都相互隔离的递归#parse的时候;也能支持相对路径

  • 可放置min-velocity.properties文件(可选)在classpath根路径下,用于覆盖velocity的各种默认属性

  • min-velocity.properties可使用default.static.util.mappings属性配置默认的静态工具类,这 些工具类将被默认放入模板context中,可配置多个,如:default.static.util.mappings = ClassUtils:org.apache.commons.lang.ClassUtils

  • 设置'stream.reference.rendering'开关(true/false),默认关闭; 开启后,遇到reference是stream或reader的时候, 将读取stream或reader中的内容做渲染而非简单地toString渲染; 其中读取stream或reader的buffer可通过'stream.reference.rendering.buffer.size'配置大小 (默认为1024个字符); 亦可通过'stream.reference.rendering.limit'选项设置能够从流中读取的最大字符数限制(默认为100000)

  • 支持String模板渲染,即直接将模板内容以String形式传入api进行渲染而不是只能选择传入一个模板路径

  • 新增index.out.of.bounds.exception.suppress选项,当设置为true时,模板中对数组或list进行的取值或设置操作将忽略index out of bounds异常

For English speakers, see below:

  • No event mechanism

  • No macro

  • No '#stop'

  • No '#evaluate'

  • No '#define'

  • No '#break'

  • requires jdk1.5+

  • By default no logs rather than log to velocity.log

  • defaults to use classapth resource loader

  • I/O encoding defaults to UTF-8

  • #set directive defaults to allow null value

  • resource cache on by default

  • parser pool removed

  • relative path support for #parse and #include directives

  • $ParseUtil.recParsing("xxx.vm").addParam("key", val) template parsing util added. You can see it as a '#parse' directive with invocation stack frame,
    which could easily do recursive parsing with isolated context in each round of recursion. This also supports relative path.

  • could place an optional 'min-velocity.properties' file in classpath root to configure velocity runtime.

  • min-velocity could contain zero or more 'default.static.util.mappings' property configs to expose static utility classes in template contexts, for example: default.static.util.mappings = ClassUtils:org.apache.commons.lang.ClassUtils, with this config you can reference to org.apache.commons.lang.ClassUtils class with key 'ClassUtils' anywhere.

  • stream/reader reference rendering supported. If you set 'stream.reference.rendering'(default false) to 'true', min-velocity will dump the contents of a stream/reader reference rather than just invoking 'toString' on them while rendering. And the stream/reader reading buffer size could be specified by configuration 'stream.reference.rendering.buffer.size', measured in number of characters(default 1024). And further more, the maximum number of characters read from a stream could be limited by configuration 'stream.reference.rendering.limit'(default 100000).

  • String literal templates rendering supported. Just specify template contents in a in-memory-String value to render, other than always specify a template path.

  • When 'index.out.of.bounds.exception.suppress' option is setting to be 'true',any 'IndexOutOfBoundsException' will be ignored when accessing or setting elements of arrays and lists.

Maven Central Repo:

<dependency>
    <groupId>com.github.pfmiles</groupId>
    <artifactId>min-velocity</artifactId>
    <version>1.0</version>
</dependency>

代码样例参见单元测试:

package com.github.pfmiles.minvelocity;

import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import junit.framework.TestCase;

import com.github.pfmiles.org.apache.velocity.Template;

public class TemplateUtilTest extends TestCase {

    public void testRenderStringTemp() {
        String templateString = "#foreach($i in $list)\n$i\n#end";
        Map<String, Object> ctxPojo = new HashMap<String, Object>();
        List<String> list = new ArrayList<String>();
        list.add("one");
        list.add("two");
        list.add("three");
        ctxPojo.put("list", list);
        StringWriter out = new StringWriter();
        TemplateUtil.renderString(templateString, ctxPojo, out);
        // System.out.println(out.toString());
        assertTrue("one\ntwo\nthree\n".equals(out.toString()));
    }

    public void testRenderTemplate() {
        Template temp = TemplateUtil.parseStringTemplate("#foreach($i in $list)\n$i\n#end");
        Map<String, Object> ctxPojo = new HashMap<String, Object>();
        List<String> list = new ArrayList<String>();
        list.add("one");
        list.add("two");
        list.add("three");
        ctxPojo.put("list", list);
        StringWriter out = new StringWriter();
        TemplateUtil.renderTemplate(temp, ctxPojo, out);
        // System.out.println(out.toString());
        assertTrue("one\ntwo\nthree\n".equals(out.toString()));
    }

    public void testRefRendering() {
        Template temp = TemplateUtil.parseStringTemplate("hello $ref world");
        Map<String, Object> ctxPojo = new HashMap<String, Object>();
        StringReader stream = new StringReader("1234567890");
        ctxPojo.put("ref", stream);
        StringWriter writer = new StringWriter();
        TemplateUtil.renderTemplate(temp, ctxPojo, writer);
        assertTrue("hello 1234567890 world".equals(writer.toString()));
    }
}
  • DPI(DPR) stands for Dots Per Inch which technically means printer dots per inch。 这个参数实际上量化了屏幕的物理分辨率和显示清晰度,比如iphone的DPR就是2,比一般的手机都要高。 同样的图片在不同手机上显示的效果就有很大不同,特别是对于apple设备,由于其DPR比较高,因此一般必须对其 应用分辨率高的图片显示效

  • -webkit-min-device-pixel-ratio为1.0 所有非Retina的Mac 所有非Retina的iOS设备 Acer Iconia A500  Samsung Galaxy Tab 10.1 Samsung Galaxy S    -webkit-min-device-pixel-ratio为1.3 Google Nexus 7   -webkit-min-device-pi

  • 常见值对照表: -webkit-min-device-pixel-ratio: 1.0 All non-Retina Macs Apple iPhone (1st generation) Apple iPhone 3G Apple iPhone 3GS Apple iPad (1st generation) Apple iPad 2 Apple iPad mini (1st generation)

  • 初识Velocity动画,感觉它并没有那么强大,但是渐渐感觉它的ui动画可以让我们简易的使用到我们的项目中。 Velocity动画的简介:   下载地址:http://www.julian.com/research/velocity/   兼容性:IE8 和 Android2.3   官网的配置代码:    require.config({     paths: {         "jquery

  • 1,使用annotation 声明控制器        <mvc:annotation-driven /> <context:component-scan base-package="com.sf.cc.controller" /> 2.velocity引擎 <bean id="velocityConfigurer" class="org.springframework.web.servlet.v

  • [b]Devices with -webkit-min-device-pixel-ratio: 1.0[/b] All non-Retina Macs Apple iPhone (1st generation) Apple iPhone 3G Apple iPhone 3GS Apple iPad (1st generation) Apple iPad 2 Apple iPad mini (1st

  • <!DOCTYPE html> <!--[if IE 8]> <html lang="en" class="ie8 no-js"> <![endif]--> <!--[if IE 9]> <html lang="en" class="ie9 no-js"> <![endif]--> <!--[if !IE]><!--> <html lang="en"> <!--<![endif]-->

  • <script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.3/velocity.min.js"></script> //vue动画中: leave: function (el, done) { Velocity(el, { translateX: '15px', rotateZ: '50deg' }

 相关资料
  • 我有一个java方法,它需要几个字符串。需要从Velocity模板调用此方法。但是,字符串太复杂了,有很多单引号、双引号和逗号。因此,合并失败。有没有办法逃避速度中的引号?

  • Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。  当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只 关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Ve

  • Notational Velocity 是 Mac 系统下一款用来记录备注和做速记的桌面软件。

  • velocity-react 是为 Velocity.js 提供的 React 组件。 示例代码: <VelocityComponent animation={{ opacity: this.state.showSubComponent ? 1 : 0 }} duration={500}>     <MySubComponent/> </VelocityComponent>

  • 问题内容: 如何使用诸如Velocity或FreeMarker之类的模板引擎构造电子邮件正文来实现i18n? 通常,人们倾向于创建如下模板: 并创建具有以下属性的资源包: 这就产生了一个基本的问题:如果我的文件很大,包含很多行文本,那么在单独的资源包()文件中翻译和管理每个文件就变得很麻烦。 我想做的是,为每种语言创建一个单独的文件,类似,然后以某种方式告诉Velocity / Spring根据输

  • 我有一个Spring Boot应用程序,它公开了一个用于呈现相对简单的velocity模板的API。模板使用来包含几个其他模板,否则会写出从Java层传递给它的一些基本变量。模板位于JAR文件中,因此它们是从类路径加载的。我使用以下每个请求动态创建的velocity engine设置: 模板的多个部分对于每个请求来说是唯一的(资源用作对简单的Spring MVC控制器的响应),所以我需要禁用模板资