使用模版引擎Velocity生成静态页面

1:模版文件

	

2:java代码

/**
 * Copyright © 2012-2016 JeeSite All rights reserved.
 */
package com.sycloudedu.manager.modules.cms.web;

import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FileUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;


@Controller
@RequestMapping(value = "${adminPath}/cms/article")
public class ArticleController extends BaseController {

	@Autowired
	private ArticleService articleService;
	@Autowired
	private ArticleDataService articleDataService;
	@Autowired
	private CategoryService categoryService;
    @Autowired
   	private FileTplService fileTplService;
    @Autowired
   	private SiteService siteService;
	
    
	@RequestMapping(value = "buildNewsHtml")
	public String buildNewsHtml( Model model, RedirectAttributes redirectAttributes, HttpServletRequest request) {
		Map map = new HashMap();
		Map page = new HashMap();
		String categoryId = request.getParameter("categoryId");
		map.put("categoryId", categoryId);
		try {
			VelocityEngine ve = new VelocityEngine();
		    Properties p = new Properties();  
		    p.put("file.resource.loader.class",  
		    "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");  
		    p.setProperty(Velocity.ENCODING_DEFAULT, "UTF-8");
	        p.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
	        p.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8");
	        ve.init(p);  
		    String templateFile="news_html.vm";  
		    Template template = ve.getTemplate(templateFile);  
		    VelocityContext context = new VelocityContext();  
		    List> result = articleService.findNewsList(map);
		    int pageSize = 20;
		    int totalPage = (int) Math.ceil((float)result.size()/pageSize);
		    int i = 0;
		    for(int j=1; j<= totalPage; j++){
		    	if(j<=1){
		    		i=j;
		    	}
		    	List> list = new ArrayList>();
		    	for(;i <= (j*pageSize>result.size()?result.size():j*pageSize); i++){
		    		list.add(result.get(i-1));
			    }
		    	page.put("totalRecord", result.size());
		    	page.put("pageNo", j);
		    	page.put("totalPage", totalPage);
			    context.put("list", list);
			    context.put("page", page);
			 // 输出
			    StringWriter sw = new StringWriter();
			    template.merge(context,sw);
			    
			    String realPath=Global.getConfig("indexnews_html_path");
			    String path= realPath+File.separator;
			    File f=new File(path,j+"_static_news.html");
				FileUtils.writeStringToFile(f, sw.toString());
				list.clear();
		    }
		    addMessage(redirectAttributes, "静态页面生成成功");
		} catch (IOException e) {
			e.printStackTrace();
		}
	    return "redirect:" + adminPath + "/cms/article/?repage&category.id="+              (categoryId!=null?categoryId:"");
	}
	
	
}

三、Velocity基本语法


1、"#"用来标识Velocity的脚本语句,包括#set、#if 、#else、#end、#foreach、#end、#iinclude、#parse、#macro等;
如:
#if($info.imgs)

#else

#end

2、"$"用来标识一个对象(或理解为变量);如
如:$i、$msg、$TagUtil.options(...)等。

3、"{}"用来明确标识Velocity变量;
比如在页面中,页面中有一个$someonename,此时,Velocity将把someonename作为变量名,若我们程序是想在someone这个变量的后面紧接着显示name字符,则上面的标签应该改成${someone}name。

4、"!"用来强制把不存在的变量显示为空白。
如当页面中包含$msg,如果msg对象有值,将显示msg的值,如果不存在msg对象同,则在页面中将显示$msg字符。这是我们不希望的,为了把不存在的变量或变量值为null的对象显示为空白,则只需要在变量名前加一个“!”号即可。
如:$!msg
我们提供了五条基本的模板脚本语句,基本上就能满足所有应用模板的要求。这四条模板语句很简单,可以直接由界面设计人员来添加。在当前很多EasyJWeb的应用实践中,我们看到,所有界面模板中归纳起来只有下面四种简单模板脚本语句即可实现:
   4.1、$!obj  直接返回对象结果。
   如:在html标签中显示java对象msg的值。

$!msg


  在html标签中显示经过HtmlUtil对象处理过后的msg对象的值  

$!HtmlUtil.doSomething($!msg)

  4.2、#if($!obj) #else #end 判断语句
   如:在EasyJWeb各种开源应用中,我们经常看到的用于弹出提示信息msg的例子。
   #if($msg)
  
   #end
上面的脚本表示当对象msg对象存在时,输出

你可能感兴趣的:(java,Velocity,java)