`
gatusso52
  • 浏览: 109661 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

velocity 学习进阶

    博客分类:
  • j2ee
阅读更多

1

使固定后缀名的所有页面都被velocity渲染

web.xml

  <servlet>
  	<servlet-name>velocity</servlet-name>
  	<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
  	  <init-param>
  		<param-name>org.apache.velocity.properties</param-name>
  		<param-value>/WEB-INF/velocity.properties</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>velocity</servlet-name>
  	<url-pattern>*.vpage</url-pattern>
  </servlet-mapping>

其中velocity.properties(注意classloader和encoding)

tools.view.servlet.error.template = error.vm
tools.view.servlet.layout.directory = /
tools.view.servlet.layout.default.template =  default.vm
resource.loader = webapp
webapp.resource.loader.class = org.apache.velocity.tools.view.WebappResourceLoader
webapp.resource.loader.cache = true
webapp.resource.loader.modificationCheckInterval = 2
input.encoding = gbk
output.encoding = gbk
velocimacro.library.autoreload = true
runtime.log.logsystem.class=org.apache.velocity.runtime.log.Log4JLogSystem
runtime.log.logsystem.log4j.logger=velocity
parser.pool.size=50

 这样所有.vpage都经过velocity渲染

 

2

还可以使用tools.xml集中加引用

修改web.xml如下

  <servlet>
  	<servlet-name>velocity</servlet-name>
  	<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
  	<init-param>
  		<param-name>org.apache.velocity.toolbox</param-name>
  		<param-value>/WEB-INF/tools.xml</param-value>
  	</init-param>
  	  	<init-param>
  		<param-name>org.apache.velocity.properties</param-name>
  		<param-value>/WEB-INF/velocity.properties</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>velocity</servlet-name>
  	<url-pattern>*.vpage</url-pattern>
  </servlet-mapping>
 

 

于是可以在tools.xml定义变量、velocity提供的类、以及自己定义的类。下面分别举例

<?xml version="1.0" encoding="UTF-8"?>
<toolbox>
	<data>
		<key>name</key>
		<value>severus</value>
	</data>
	<tool>
		<key>myTool</key>
		<class>net.sx.velocity.tools.MyTool</class>
	</tool>
	<tool>
		<key>date</key>
		<scope>request</scope>
		<class>org.apache.velocity.tools.generic.DateTool</class>
		<parameter name="format" value="yyyy-MM-dd hh:mm:mm"/>
	</tool>
</toolbox>

其中MyTool如下

public class MyTool {
	public String getMessage() {
		return "message";
	}
	
	public String sayHello(String s){
		return "say hello by macro " + s;
	}
}

 于是vpage可以这样用

<html>
    <body >        
        Hello, $name <br>
        $myTool.message <br>
	$date.date<br>
    </body>
</html>

  输出

Hello, severus 
message 
Sun Jun 07 04:09:09 CST 2009
 

 

 

3

使用macro自定义操作函数。

可以用macro.vm集中定义。

tools.xml集中加引用,macro.vm中集中加函数。

 

在velocity.properties中加一句

velocimacro.library = WEB-INF/macro.vm

 然后macro.vm

#macro(sayHello $name)
 $myTool.sayHello($name)
#end

 于是可以在vpage中这样用

#sayHello("severus")

  输出

say hello by macro severus
分享到:
评论
1 楼 chenpingtai2008 2010-08-31  
你好,在学习velocity,看了你文章,有些疑问帮忙解答下吧:
1.是不是整个项目只使用一个toolbox,比如两个人开发的话,现在1.vpage和2.vpage
是不同人写的,都有一个name属性,但值不一样,要如何做呢?
2.数据往往是从数据库里取出来的,toolbox里难道要写service层的类吗?然后在页面上调它的方法。

3.jsp和velocity 怎么混用呢?

相关推荐

Global site tag (gtag.js) - Google Analytics