Velocity自定义授命函数

  • 简述:项目发版时需要添加版本号码,以往都是已发版日期,每次发版前都需要更改,感觉麻烦
  • 问题:因为版本每次不同即可,可使用UUID代替
  • 实现:在Velocity中使用自定义授命函数
  • 过程:

UUID的概念,
参考:
http://www.cnblogs.com/jdonson/archive/2009/07/22/1528466.html
http://blog.csdn.net/carefree31441/archive/2009/03/17/3998553.aspx
UUID可以当做表中的主键

1.定义页面
<html><body>#version()</body></html>

2.定义velocity.properties,放在WEB-INF下
input.encoding = UTF-8
output.encoding =UTF-8
webapp.resource.loader.cache = true
webapp.resource.loader.modificationCheckInterval = 1
velocimacro.library.autoreload = false
velocimacro.library = /WEB-INF/VM_global_library.vm
velocimacro.permissions.allow.inline = true
velocimacro.permissions.allow.inline.to.replace.global = false
velocimacro.permissions.allow.inline.local.scope = false
velocimacro.context.localscope = false
##配置函数路径
userdirective=web.tags.VersionTag
##

3.定义函数
package web.tags;

import java.io.IOException;
import java.io.Writer;
import java.util.UUID;

import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.directive.Directive;
import org.apache.velocity.runtime.parser.node.Node;

public class VersionTag extends Directive{

	@Override
	public String getName() {
		return TagNameConstants.VERSION_TAG;//见4常量类,即在VM中使用的名称,version
	}
	@Override
	public int getType() {
		return LINE;//或BLOCK
	}
	@Override
	public boolean render(InternalContextAdapter context, Writer writer,
			Node node) throws IOException, ResourceNotFoundException,
			ParseErrorException, MethodInvocationException {
		writer.write(UUID.randomUUID().toString());//输出的内容
		return false;
	}
}

4.可添加常量类,便于管理
package web.tags;
public class TagNameConstants {
/** 显示版本号 使用#version */
public final static String VERSION_TAG = "version" ;
}


参考文献:http://www.educity.cn/wenda/379584.html

猜你喜欢

转载自mingyundezuoan.iteye.com/blog/2207433