freemarker等的同类产品,可脱离web环境使用。
在web项目中与springMVC搭配,可参考<spring mvc中的视图框架>
它是一个apache的项目,地址为:http://velocity.apache.org/engine/1.7/user-guide.html
1.依赖
<!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version> </dependency>
2.例子
下面是java文件:
import java.io.StringWriter; import java.util.ArrayList; import java.util.List; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.junit.Test; import com.yichudu.meweb.dto.GaoKaoScoreDto; public class velocityTest { @Test public void velocityTestFun() { // 初始化模板引擎 VelocityEngine ve = new VelocityEngine(); // 配置引擎上下文对象 VelocityContext ctx = new VelocityContext(); ctx.put("gaoKaoScoreList", genData()); // 加载模板文件 Template template = ve.getTemplate("/WebContent/WEB-INF/template/test.vm"); StringWriter sw = new StringWriter(); // 渲染模板 template.merge(ctx, sw); System.out.print(sw.toString()); } public List<GaoKaoScoreDto> genData() { List<GaoKaoScoreDto> gaoKaoScoreList = new ArrayList<>(); GaoKaoScoreDto dto = new GaoKaoScoreDto(); dto.chinese = 124; dto.english = 100; dto.idCard = "123"; dto.luoFenplusZhaoGuFen = 123; dto.math = 1; dto.name = "xiaoming"; dto.no = "12"; dto.ranking = 2; dto.total = 1234; dto.type = "arts"; gaoKaoScoreList.add(dto); return gaoKaoScoreList; } } /* <tbody> <tr> <td>12</td> <td>xiaoming</td> <td>123</td> <td>arts</td> <td>124</td> <td>1</td> <td>0</td> <td>100</td> <td>1234</td> <td>123</td> <td>2</td> </tr> </tbody> */下面是vm模板文件:
<tbody> #foreach ($element in $gaoKaoScoreList) <tr> <td>$element.no</td> <td>$element.name</td> <td>$element.idCard</td> <td>$element.type</td> <td>$element.chinese</td> <td>$element.math</td> <td>$element.comprehensive</td> <td>$element.english</td> <td>$element.total</td> <td>$element.luoFenplusZhaoGuFen</td> <td>$element.ranking</td> </tr> #end </tbody>
3.指令
3.1 foreach
#foreach ($student in $studentList) <name>$student.name</name> <grade>$student.grade</grade> #end
3.2 注解
## This is a single line comment.上面是行注解,下面是块注解.
#* Thus begins a multi-line comment. Online visitors won't see this text because the Velocity Templating Engine will ignore it. *#
3.3 参数赋值
#set( $foo = "bar" )
3.4 访问对象的字段
$foo.getBar() ## is the same as $foo.Bar
3.5 if-else
#if( $foo < 10 ) **Go North** #elseif( $foo == 10 ) **Go East** #elseif( $bar == 6 ) **Go South** #else **Go West** #end
3.6 变量边界
#* 页面中有一个$someonename,此时,Velocity将把someonename作为变量名,若我们程序是想在someone这 个变量的后面紧接着显示name字符,则上面的标签应该改成 *# ${someone}name
3.7 include
若干个网页有相同的页脚,除了用<iframe>标签,还可以用#include指令.区别在于<iframe>标签的内容是一个完整的html,而include进来的只是共用的文本片段.
<body> #include('common/footer.html') </body>
3.8 parse
与include类似,前者引入的是普通文本,后者引入的是含有指令的文本,并作解析.
4.IDE插件
在 eclipse marketplace中搜索veloedit,安装即可。
图4-1 veloedit的高亮与提示效果