`
chenpingtai2008
  • 浏览: 58804 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

Velocity 的macro(2)

阅读更多
上篇举了一个比较简单得了例子,用来说明他的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的真正用处,只能理解到他可以有效的 分离业务逻辑和表现层。之所以对其进行学习是因为项目中用这个来进行自动生成代码,希望有深入研究的网友进行分享这里代码生成的机制
分享到:
评论

相关推荐

    Velocity语法以及整合struts2总结

    【Velocity语法以及整合struts2总结】 Velocity是一个开源的Java模板引擎,它是Apache软件基金会的Jakarta项目的一部分。Velocity将HTML代码与业务逻辑分离,使得开发者可以专注于内容和设计,而不用关心数据如何...

    velocity入门使用教程

    在velocity.properties文件中,可以指定toolbox.xml文件,该文件用于定义工具箱,工具箱中可以包含自定义的Velocity工具(Macro)和函数(Function)。这些工具和函数可以在模板中直接调用,简化模板编写。 通过...

    Velocity 和 FreeMarker区别

    - **Velocity**也有类似的宏定义`#macro(name param1 param2) ... #end`,但功能相对有限。 5. **转义**: - **FreeMarker**内置了多种转义功能,比如HTML转义、XML转义等,可以通过简单的指令实现。 - **...

    JAVA的Velocity语法学习

    4. 利用Velocity提供的宏(macro)功能,可以创建可重用的代码片段,提高模板的复用性。 5. 调试和错误处理:使用Velocity的`#debug`指令可以帮助调试模板,查看变量的状态和执行流程。 ** 学习资源 ** 提供的...

    velocity的学习资料

    2. **Velocity语法** - **变量引用**: 变量以`$`符号开头,如`$name`。 - **逻辑控制**: `#if`, `#else`, `#elseif`用于条件判断;`#foreach`用于循环遍历集合。 - **方法调用**: 可以在模板中直接调用对象的方法...

    Velocity非常容易学会

    ### Velocity 模板引擎知识点详解 #### 一、Velocity简介 Velocity是一款强大的基于Java的模板引擎,它允许用户通过一种简单且易于理解的模板语言来访问由Java代码定义的对象。Velocity的设计初衷是为了使得Web...

    velocity(eclipse插件)

    2. **指令使用**: 常用的Velocity指令包括`#set`(设置变量)、`#if`(条件判断)、`#foreach`(循环)和`#macro`(定义宏)等。 3. **变量引用**: 变量引用通常以`$`开头,例如`$variable`。对于null或不存在的...

    velocity中文

    ### 2. Velocity模板语言(VTL) Velocity模板语言是一种标记语言,用于描述如何在模板中插入动态内容。VTL的语法简洁,主要包括以下几个关键概念: - `${}`:这是Velocity中的变量引用符号,用于插入Java对象的...

    velocity 电子书

    2. **Velocity上下文(Context)** - Context是Velocity模板与后端Java代码交互的桥梁,存储了传递给模板的数据。 - 开发者可以将Java对象放入Context,然后在模板中通过VTL变量来访问这些对象。 3. **模板设计...

    Velocity脚本简明教程

    除了变量引用和控制结构,Velocity还提供了许多内置的模板指令,如`#set`用于设置变量,`#include`用于插入另一个模板,`#macro`定义宏等。 ### 6. 宏 宏是Velocity的一个强大特性,它可以封装重复使用的代码片段...

    velocity语法,涉及其常用规整

    Velocity中还提供了宏(macro)机制,用于实现代码的重用。 注释 Velocity中可以使用##来注释代码。例如: ``` ## This is a comment ``` Velocity中还提供了其他注释方式,如/* */和&lt;!-- --&gt;。 关系和逻辑...

    Velocity模板入门DEMO

    2. **#set指令**:这是Velocity中最基本的赋值操作。例如,`#set($name = "John")` 将字符串"John"赋值给变量$name。这个指令允许我们在模板中进行简单的算术和逻辑运算。 3. **$引用**:在模板中,以`$`开头的...

    Velocity10分钟了解

    ### Velocity 快速入门 #### 一、Velocity 概述 Velocity 是一款基于 Java 的模板引擎,它将模板设计和 Java 代码分离,使得前端页面的设计更加简洁且易于维护。Velocity 支持动态解析 Velocity 模板语言 (VTL),...

    apache velocity介绍及资料

    2. **指令**:Velocity提供了多种内置指令,如#include用于包含其他模板,#parse用于动态解析模板,#macro定义可重用的宏等。 3. **宏库**:宏是Velocity的一个强大特性,可以定义复用的模板片段,方便代码组织和...

    velocity document

    2. **指令控制**:Velocity提供了多种控制结构,如`#if`(条件判断)、`#foreach`(循环)、`#set`(赋值)等,它们用于构造复杂的逻辑。 3. **宏定义与调用**:Velocity支持宏,类似于函数,可以重复使用一段模板...

    velocity 入门文档及应用源码,很适合做自动代码生成

    手册中会详细介绍Velocity上下文(Context)、模板(Templates)、模板语言(Template Language)等核心概念,还有Velocity Engine的配置、宏库(Macro Library)的使用,以及与其他Java库如Spring的集成等高级主题。...

    Velocity模板应用案例

    - #macro:定义宏,可复用的代码块,如`#macro(name args) ... #end`,然后用`#name(args)`调用。 - #import:导入Java类或包,如`#import('java.util.*')`。 - #function:定义函数,类似于宏,但可以接受参数和...

    velocity文档及其详细语法

    ## 2. Velocity函数和方法调用 Velocity支持调用对象的方法,例如: ```vel 你的名字是:$user.getName() ``` 此外,Velocity还有一系列内置的工具类(如`#set`,`#if`,`#foreach`),以及可以自定义的Velocity...

    velocity1.5

    **2. Velocity 1.5的关键特性** - **语法规则**:Velocity使用一种简单的、易于理解的语法,称为Velocity Template Language (VTL)。开发者可以通过`$variable`来引用Java对象,`#if`、`#foreach`等控制结构实现...

Global site tag (gtag.js) - Google Analytics