使用velocity生成静态页面

最近在做门户网站中用到了生成静态页面的技术,使用的是velocity,小小的总结一下---并不是很深入,不过够用
一>首先在到http://velocity.apache.org/download.cgi下载velocity的jar包
二>新建一个properties对象,为velocity的一些属性配值:

[java] view plaincopy
Properties prop = new Properties();  
prop.put("runtime.log", config.getServletContext().getRealPath("/WEB-INF/log/velocity.log"));
prop.put("file.resource.loader.path", config.getServletContext().getRealPath("/WEB-INF/vm"));//配置模版目录
prop.put("input.encoding", "gb2312");//输入编码
prop.put("output.encoding", "gb2312");//输出编码
Velocity.init(prop);//初始化

三>从数据库提取数据,并生成静态页面

[java] view plaincopy
List pols = getPols();//数据库查询  
try{
File saveDir = new File(request.getSession().getServletContext().getRealPath("/html"));
//静态文件存放目录
if(!saveDir.exists())saveDir.mkdirs();
VelocityContext context = new VelocityContext();
context.put("pols", pols);//将数据放到velocity内容对象内
Template template = Velocity.getTemplate("Information/zcfg.vm");
//获得模版; 注意,是在properties里面已经配好的模版目录下
FileOutputStream outStream = new FileOutputStream(new File(saveDir,"index.html"));//生成静态文件名为index.html
OutputStreamWriter writer = new OutputStreamWriter(outStream,"gb2312");
BufferedWriter sw = new BufferedWriter(writer);
template.merge(context, sw);
sw.flush();
sw.close();
outStream.close();
}
catch(Exception e)
{
e.printStackTrace();
}


四>关于生成静态页面的时间,我认为应该在后台添加或修改的同时触发生成静态页面的方法,所以方法三是写在添加或更新的Action里面的,放置在添加,更新的方法语句之后.
五>模版页的写法,velocity的语法我就不说了,网上一堆一堆的,这里我就说下刚使用velocity时遇到的一个小问题
如何循环遍历一个List集合,并控制循环边界的问题 : 要利用velocity中循环语句的$velocityCount(此参数名为固定的,不可更改)参数,它的作用是记录循环次数,控制循环边界可以用它来实现

[xhtml] view plaincopy
#foreach($pol in $pols)  
#if($velocityCount<=2)
<li><a>$(pol.content)</a></li>
#end
#end


以上的语句实现的是只循环出集合中的前两个元素,并输出元素的content属性值,如果要求只循环出一个元素,应该写成

[c-sharp] view plaincopy
#foreach($pol in $pols)  
#if($velocityCount<=1)
<li><a>$(pol.content)</a></li>
#end
#end


如果需要详细的控制,可以写成#if($velocityCount==1)
如果需要一个List中的元素显示不同的属性,可以写成

[xhtml] view plaincopy
#foreach($pol in $pols)  
#if($velocityCount<=2)
<li><a>$(pol.content)</a></li>
#else
<li><a href="${pol.name}.html" mce_href="${pol.name}.html">${pol.content}</a></li>
#end
#end


以上实现的就是让集合中前两个元素只输出pol的content属性值,而之后的元素显示pol的name和content属性值.
六>OK,大概就这样!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值