上篇举了一个比较简单得了例子,用来说明他的macro的用途,这里举一个相对复杂的例子来说明macro的进一步用法:
效果:
定义一个模版这个模版可以输出一个表格,表格的效果是每隔一行用不同的颜色进行显示。
1. 采用Velocity之前的实现
比如我们有一个结果集rs
- <%int count=1:
- String clolor="CCCC";
- %>
- <table>
- <%while(rs.next){
- if(count%2==0){
- clolor="FFFF"
- }else{
- clolor="CCCC";
- }
- %>
- <tr color="<!---->">
- <td>
- <%=rs.getString(1)%>
- td>
- <td>
- <%=rs.getString(2)%>
- td>
- tr>
- <%
- count++;}
- %>
- table>
还有一种方法是将rs转换成list。
- for(int i=0;i
- if(i%2==0){
- color="FFFF"
- }else{
- color="CCCC"
- }
其它方法:采用JSTL+EL来实现,还可以采用相应组件display、CE等。这里不进行讨论。
2. 采用Velocity进行动态实现
2.1 模版代码
- #macro (writeTable $productList)
- #set ($rowCount = 1)
- #foreach($product in $productList)
- #if ($rowCount % 2 == 0)
- #set ($bgcolor = "#FFFFFF")
- #else
- #set ($bgcolor = "#CCCCCC")
- #end
- <tr>
- <td bgcolor="$bgcolor">$producttd>
- <td bgcolor="$bgcolor">$producttd>
- tr>
- #set ($rowCount = $rowCount + 1)
- #end
- #end
- #set ($products = ["one", "two", "three"])
- <html>
- <head>
- <title>Titletitle>
- head>
- <body>
- <table>
- #writeTable($products)
- #include ("footer.vm")
- table>
- body>
- html>
2.2 java代码
- package com.lht.velocity;
-
- import java.io.StringWriter;
- import java.io.Writer;
-
- import org.apache.velocity.Template;
- import org.apache.velocity.VelocityContext;
- import org.apache.velocity.app.Velocity;
- public class Macro2 {
- public static void main(String[] args) throws Exception {
- Velocity.init();
- Template t = Velocity.getTemplate("macro2.vm");
-
- VelocityContext ctx = new VelocityContext();
-
- Writer writer = new StringWriter();
- t.merge(ctx, writer);
-
- System.out.println(writer);
- }
- }
3. 执行结果
- <html>
- <head>
- <title>Titletitle>
- head>
- <body>
- <table>
-
- <tr>
- <td bgcolor="#CCCCCC">onetd>
- <td bgcolor="#CCCCCC">onetd>
- tr>
- <tr>
- <td bgcolor="#FFFFFF">twotd>
- <td bgcolor="#FFFFFF">twotd>
- tr>
- <tr>
- <td bgcolor="#CCCCCC">threetd>
- <td bgcolor="#CCCCCC">threetd>
- tr>
- footer.......... table>
- body>
- html>
4. 比较
从实现上来说在采用Velocity之前页面中引入了过多的java代码,当然如果采用自定义标签、JSTL之类的话也可以避免这些的。自己现在还没有体会到Velocity的真正用处,只能理解到他可以有效的 分离业务逻辑和表现层。之所以对其进行学习是因为项目中用这个来进行自动生成代码,希望有深入研究的网友进行分享这里代码生成的机制。
分享到:
相关推荐
赠送jar包:velocity-engine-core-2.3.jar; 赠送原API文档:velocity-engine-core-2.3-javadoc.jar; 赠送源代码:velocity-engine-core-2.3-sources.jar; 赠送Maven依赖信息文件:velocity-engine-core-2.3.pom;...
赠送jar包:velocity-engine-core-2.3.jar 赠送原API文档:velocity-engine-core-2.3-javadoc.jar 赠送源代码:velocity-engine-core-2.3-sources.jar 包含翻译后的API文档:velocity-engine-core-2.3-javadoc-...
赠送jar包:velocity-tools-generic-3.1.jar; 赠送原API文档:velocity-tools-generic-3.1-javadoc.jar; 赠送源代码:velocity-tools-generic-3.1-sources.jar; 赠送Maven依赖信息文件:velocity-tools-generic-...
velocity-tools-2.0.jar velocity-tools-2.0.jar velocity-tools-2.0.jar velocity-tools-2.0.jar velocity-tools-2.0.jar
velocity-engine-core-2.1.jar
赠送jar包:velocity-tools-generic-3.1.jar 赠送原API文档:velocity-tools-generic-3.1-javadoc.jar 赠送源代码:velocity-tools-generic-3.1-sources.jar 包含翻译后的API文档:velocity-tools-generic-3.1-...
还在为找不到jar文件烦心吗,不用了到我空间来有你想要的,持续更新。。。 velocity-1.5.jar,velocity-1.6.2-dep.jar,velocity-tools-1.3.jar
velocity 2.0 包需要的 jar 包 官方下载的,测试过了,可以运行 Demo 网上都有,关键几行代码: // ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "file"); // 按文件加载 // ve.init(); // Template t = ...
velocity-dep-1.4.jar velocity-dep-1.4.jar
velocity-1.7-dep.jar.zip velocity-1.7-dep.jar.zip velocity-1.7-dep.jar.zip
• commons-collections-3.2.jar • velocity-1.4.jar • velocity-tools-view-1.2.jar • avalon-logkit-2.1.jar
velocity-tools-view-1.4.jar
velocity-tools-view-2.0.jar
velocity-1.7-dep.jar ============================================================
velocity-tools-1.4.jar
赠送jar包:velocity-1.7.jar; 赠送原API文档:velocity-1.7-javadoc.jar; 赠送源代码:velocity-1.7-sources.jar; 包含翻译后的API文档:velocity-1.7-javadoc-API文档-中文(简体)版.zip 对应Maven信息:...
velocity-1.7,包含jar包以及全部的依赖
velocity-tools-view-2.0-beta1.jar, 供大家使用
赠送jar包:velocity-1.7.jar 赠送原API文档:velocity-1.7-javadoc.jar 赠送源代码:velocity-1.7-sources.jar 包含翻译后的API文档:velocity-1.7-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:...
velocity-tools-generic-2.0.jar