velocity 二 开发篇

阅读更多
先来看看velocity是怎么工作的?

在应用中使用velocity,一般需要以下的几个步骤:
  •   初始化Velocity,可以使用单例,或者运行期实例
  •   创建context对象,用于包括相应的变量
  •   在context中增加相应的数据
  •   选择模板
  •   合并模板,产生输出

如下的例子:
java 代码
 
  1. import java.io.StringWriter;  
  2. import org.apache.velocity.VelocityContext;  
  3. import org.apache.velocity.Template;  
  4. import org.apache.velocity.app.Velocity;  
  5. import org.apache.velocity.exception.ResourceNotFoundException;  
  6. import org.apache.velocity.exception.ParseErrorException;  
  7. import org.apache.velocity.exception.MethodInvocationException;  
  8.   
  9. Velocity.init();                            1  
  10.   
  11. VelocityContext context = new VelocityContext();    2  
  12.   
  13. context.put( "name"new String("Velocity") );        3  
  14.   
  15. Template template = null;  
  16.   
  17. try  
  18. {  
  19.    template = Velocity.getTemplate("mytemplate.vm");    4  
  20. }  
  21. catch( ResourceNotFoundException rnfe )  
  22. {  
  23.    // couldn't find the template  
  24. }  
  25. catch( ParseErrorException pee )  
  26. {  
  27.   // syntax error: problem parsing the template  
  28. }  
  29. catch( MethodInvocationException mie )  
  30. {  
  31.   // something invoked in the template  
  32.   // threw an exception  
  33. }  
  34. catch( Exception e )  
  35. {}  
  36.   
  37. StringWriter sw = new StringWriter();  
  38.   
  39. template.merge( context, sw );                5  

上面的例子使用的是单例模式,可以使用运行期实例:
java 代码
 
  1. VelocityEngine ve = new VelocityEngine();  
  2. ve.setProperty(  
  3.     VelocityEngine.RUNTIME_LOG_LOGSYSTEM, this);  
  4. ve.init();  

关于context
context,类似于map环境,包括两个主要的方法:
java 代码
 
  1. public Object put(String key, Object value);  
  2. public Object get(String key);  

而默认的VelocityContext是使用map封装,保存相应的变量

当然,如果想和其他环境合并,如FacesContext中的Elcontext,需要定义自己的实现类。

Context chaining,
context支持多个context串,如下:
java 代码
 
  1. VelocityContext context1 = new VelocityContext();  
  2.   
  3. context1.put("name","Velocity");  
  4. context1.put("project""Jakarta");  
  5. context1.put("duplicate""I am in context1");  
  6.   
  7. VelocityContext context2 = new VelocityContext( context1 );  
  8.   
  9. context2.put("lang""Java" );  
  10. context2.put("duplicate""I am in context2");  
  11.   
  12. template.merge( context2, writer );  


Velocity不仅可以用于提供模板输出,而且可以直接对字符串进行评估:
java 代码
 
  1. StringWriter w = new StringWriter();  
  2. Velocity.mergeTemplate("testtemplate.vm", context, w );  
  3.   
  4. String s = "We are using $project $name to render this.";  
  5. w = new StringWriter();  
  6. Velocity.evaluate( context, w, "mystring", s );  


你可能感兴趣的:(velocity,Java,Apache,工作)