Velocity macro-(2)

上篇举了一个比较简单得了例子,用来说明他的macro的用途,这里举一个相对复杂的例子来说明macro的进一步用法:

效果:
定义一个模版这个模版可以输出一个表格,表格的效果是每隔一行用不同的颜色进行显示。

1. 采用Velocity之前的实现
比如我们有一个结果集rs

  1. <%int count=1:   
  2. String clolor="CCCC";   
  3. %>  
  4. <table>  
  5. <%while(rs.next){   
  6. if(count%2==0){   
  7. clolor="FFFF"  
  8. }else{   
  9. clolor="CCCC";   
  10. }   
  11. %>  
  12. <tr color="">  
  13. <td>  
  14. <%=rs.getString(1)%>  
  15. td>  
  16. <td>  
  17. <%=rs.getString(2)%>  
  18. td>  
  19. tr>  
  20. <%   
  21. count++;}   
  22. %>  
  23. table>  

还有一种方法是将rs转换成list。

  1. for(int i=0;i
  2. if(i%2==0){   
  3. color="FFFF"  
  4. }else{   
  5. color="CCCC"  
  6. }  

其它方法:采用JSTL+EL来实现,还可以采用相应组件display、CE等。这里不进行讨论。
2. 采用Velocity进行动态实现
   2.1 模版代码
  1. #macro (writeTable $productList)   
  2.     #set ($rowCount = 1)               
  3.     #foreach($product in $productList)             
  4.     #if ($rowCount % 2 == 0)   
  5.         #set ($bgcolor = "#FFFFFF")   
  6.     #else   
  7.         #set ($bgcolor = "#CCCCCC")            
  8.     #end   
  9.         <tr>  
  10.             <td bgcolor="$bgcolor">$producttd>  
  11.             <td bgcolor="$bgcolor">$producttd>  
  12.         tr>                          
  13.         #set ($rowCount = $rowCount + 1)   
  14.     #end   
  15. #end   
  16. #set ($products = ["one", "two", "three"])   
  17. <html>  
  18.     <head>  
  19.         <title>Titletitle>  
  20.     head>  
  21.     <body>  
  22.         <table>  
  23.             #writeTable($products)   
  24.             #include ("footer.vm")   
  25.         table>  
  26.     body>  
  27. html>  

2.2 java代码
  1. package com.lht.velocity;   
  2.   
  3. import java.io.StringWriter;   
  4. import java.io.Writer;   
  5.   
  6. import org.apache.velocity.Template;   
  7. import org.apache.velocity.VelocityContext;   
  8. import org.apache.velocity.app.Velocity;   
  9. public class Macro2 {   
  10.       public static void main(String[] args) throws Exception {   
  11.             Velocity.init();   
  12.             Template t = Velocity.getTemplate("macro2.vm");   
  13.   
  14.             VelocityContext ctx = new VelocityContext();   
  15.   
  16.             Writer writer = new StringWriter();   
  17.             t.merge(ctx, writer);   
  18.   
  19.             System.out.println(writer);   
  20.           }   
  21. }   

3. 执行结果
  1. <html>  
  2.     <head>  
  3.         <title>Titletitle>  
  4.     head>  
  5.     <body>  
  6.         <table>  
  7.   
  8.                                 <tr>  
  9.             <td bgcolor="#CCCCCC">onetd>  
  10.             <td bgcolor="#CCCCCC">onetd>  
  11.         tr>                          
  12.                             <tr>  
  13.             <td bgcolor="#FFFFFF">twotd>  
  14.             <td bgcolor="#FFFFFF">twotd>  
  15.         tr>                          
  16.                             <tr>  
  17.             <td bgcolor="#CCCCCC">threetd>  
  18.             <td bgcolor="#CCCCCC">threetd>  
  19.         tr>                          
  20.                                 footer..........        table>  
  21.     body>  
  22. html>  


4. 比较
    从实现上来说在采用Velocity之前页面中引入了过多的java代码,当然如果采用自定义标签、JSTL之类的话也可以避免这些的。自己现在还没有体会到Velocity的真正用处,只能理解到他可以有效的 分离业务逻辑和表现层。之所以对其进行学习是因为项目中用这个来进行自动生成代码,希望有深入研究的网友进行分享这里代码生成的机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值