博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
velcoity使用说明:foreach指令
阅读量:5927 次
发布时间:2019-06-19

本文共 3355 字,大约阅读时间需要 11 分钟。

http://blog.csdn.net/madding/article/details/6641020当在velocity中需要显示一个列表信息,我们会用foreach循环输出,

要求:

假如现在需要在页面中输出单数的内容背景为红,双数的内容为黑,构造方式如下:

[java] 
  1. package org.apache.velocity.test.issues;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.apache.velocity.test.BaseTestCase;  
  7. /** 
  8.  * 测试foreach 
  9.  * @author madding.lip at 2011.07.28 
  10.  */  
  11. public class MaddingTestForeach extends BaseTestCase {  
  12.   
  13.     public MaddingTestForeach(String name) {  
  14.         super(name);  
  15.     }  
  16.   
  17.     public void test() {  
  18.         List<String> list = new ArrayList<String>();  
  19.           
  20.         for(int i = 1; i <= 100; i++) {  
  21.             list.add(String.valueOf(i));  
  22.         }  
  23.         context.put("features", list);  
  24.           
  25.         String template =   
  26.             "#foreach ($feature in $features)" +  
  27.                 "#if($velocityCount%2 == 1)" +  
  28.                     "<font color=\"red\">$feature</font>" +  
  29.                 "#elseif($velocityCount%2 == 0)" +  
  30.                     "<font color=\"black\">$feature</font>" +  
  31.                 "#end" +  
  32.                 "#if($velocityHasNext)" +  
  33.                 "|" +  
  34.                 "#end" +  
  35.             "#end";  
  36.           
  37.         System.out.println(evaluate(template));  
  38.           
  39.     }  
  40. }  

 

BaseTestCase是Velocity源代码中的测试类

 

说明:

1.#foreach是velocity指令,

2.velcotiyCount上, velocity foreach定义的一个变量,该变量主要用来记录当前的循环次数

3.velocityHasNext, velocity foreach定义的一个变量 ,表明该循环当前是否到尾部了

 

velocity.properties:

 

[plain] 
  1. # ----------------------------------------------------------------------------  
  2. # F O R E A C H  P R O P E R T I E S  
  3. # ----------------------------------------------------------------------------  
  4. # These properties control how the counter is accessed in the #foreach  
  5. # directive. By default the reference $velocityCount and $velocityHasNext  
  6. # will be available in the body of the #foreach directive.  
  7. # The default starting value for $velocityCount is 1.  
  8. # ----------------------------------------------------------------------------  
  9.   
  10. directive.foreach.counter.name = velocityCount  
  11. directive.foreach.counter.initial.value = 1  
  12. directive.foreach.maxloops = -1  
  13.   
  14. directive.foreach.iterator.name = velocityHasNext  

 

实战记录

有一种情况就是在一个foreach下遍历两个list,那么肯定要是for(int i=0;i<...)这种数字计数形式。java中很好实现,velocity说是有个$velocityCount,但我发现不好用。它的值是从1开始的,而取list的第一个对象list.get(0),所以我用计算方式($velocityCount-1)不行,好些无效,配置$velocityCount初始值为0,配置方式也无效
msgMap.put("directive.foreach.counter.initial.value", 0);
msgMap.put("insuranceCountList", insuranceCountList);
 
没办法了,我就再做一个数字数组或List,里面存储我需要的数字,专用来做迭代,比如手动做的list为insuranceCountList
          
<AA_
INSURANCELIST
>
             ## AA_INSURANCE信息
             #foreach ($count in $insuranceCountList)
           
<AA_
INSURANCE
>
             
<
NAME
> 
$!{app.getComponent($insured).get($count).getCInsuredNme()} 
</
NAME
>
             
<AA_
PLYNO
> 
$!{app.getComponent($base).get($count).getCPlyNo()}
</AA_
PLYNO 
>
           
</AA_
INSURANCE
>
           #end
         
</AA_
INSURANCELIST
>
 
注意的$velocityCount可以不用注入,velocity foreach中直接可使用,最后给一个实战配置模版例子
REQUEST_09.xml
#set($base="PlyMain") #set($insured="Insured") #set($contactInfo="ContactInfo")
$!{REQUEST_TYPE}
$!{USER}
$!{PASSWORD}
$!{app.getComponent($contactInfo).get(0).getCVoucherFlag()}
## AA_INSURANCE信息 #foreach ($count in $AA_INSURANCECountList)
$!{app.getComponent($insured).get($count).getCInsuredNme()}
$!{app.getComponent($base).get($count).getCDD_PLYNO()}
#end
View Code

 

你可能感兴趣的文章
清橙A1202&Bzoj2201:彩色圆环
查看>>
使用data pump工具的准备
查看>>
springMVC---级联属性
查看>>
get和post区别
查看>>
是机遇还是挑战?---浅谈谷歌收购摩托罗拉移动
查看>>
项目总结26:java调用webservice接口(asmx)
查看>>
crontab执行shell脚本日志中出现乱码
查看>>
基于HTML5手机上下滑动翻页特效
查看>>
打造自己博客(wordpress)的wap手机版本
查看>>
Floodlight 在 ChannelPipeline 图
查看>>
leetcode-Word Ladder II
查看>>
VS2017调试闪退之Chrome
查看>>
做移动互联网App,你的测试用例足够吗?
查看>>
cmd.exe启动参数说明
查看>>
Pressed状态和clickable,duplicateParentState的关系
查看>>
视图加载时自动执行铵钮事件
查看>>
私活利器,docker快速部署node.js应用
查看>>
《随笔记录》20170310
查看>>
网站分析系统
查看>>
一站式解决,Android 拍照 图库的各种问题
查看>>