Apache Velocity 如何让VelocityEngine自动获取template文件中的变量

比如模板文件中有下面这行您好,${name}如何自动获取到我这个模板里面的变量名就叫name呢好像ASTReference可以做到,不过还不是很清楚怎么做,有知道的大侠麻... 比如模板文件中有下面这行
您好,${name}
如何自动获取到我这个模板里面的变量名就叫name呢
好像ASTReference 可以做到,不过还不是很清楚怎么做,有知道的大侠麻烦告诉小弟一下,感激不尽
是让Velocity自动读到template文件,获取到变量名
如上所说
展开
 我来答
kfjchvq
推荐于2016-03-27 · TA获得超过1964个赞
知道小有建树答主
回答量:1586
采纳率:0%
帮助的人:774万
展开全部
org.apache.velocity.app.Velocity.类是一个初始化单例的velocity实例的类。

单例模式是一种简单的设计模式,用最简单的话来说,就是让多个类共享一个实例,让他们能够访问到同样的数据。

对比发现:

Velocity类中使用init方法里是使用了RuntimeSingleton.init();

在RuntimeSingleton类中,使用到的运行实例是静态new出来的。

private static RuntimeInstance ri = new RuntimeInstance();

而在org.apache.velocity.app.VelocityEngine类中,并没有一个单例类来初始化,每次都会使用

private RuntimeInstance ri = new RuntimeInstance()

来创建一个新的运行实例,这样就使得每个velocity引擎都会拥有各自的实例,互不干扰。

从RuntimeSingleton类的注释来看:

/**
* This is the Runtime system for Velocity. It is the
* single access point for all functionality in Velocity.
* It adheres to the mediator pattern and is the only
* structure that developers need to be familiar with
* in order to get Velocity to perform.
*
* The Runtime will also cooperate with external
* systems like Turbine. Runtime properties can
* set and then the Runtime is initialized.
*
* Turbine for example knows where the templates
* are to be loaded from, and where the velocity
* log file should be placed.
*/

velocity和外部合作的项目,例如turbine,就使用的这个类来实例化velocity引擎。
du瓶邪
推荐于2016-03-15 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.7万
采纳率:100%
帮助的人:2949万
展开全部
方法
package com.velocity.test;

import java.io.StringWriter;
import java.util.Properties;

import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;

/**
* 从文件中加载模板文件,即velocity默认的模板文件加载方式
* @author welcome
*
*/
public class LoaderFromFile {

public static void main(String[] args) throws Exception{
//初始化参数
Properties properties=new Properties();
//设置velocity资源加载方式为file
properties.setProperty("resource.loader", "file");
//设置velocity资源加载方式为file时的处理类
properties.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
//实例化一个VelocityEngine对象
VelocityEngine velocityEngine=new VelocityEngine(properties);

//实例化一个VelocityContext
VelocityContext context=new VelocityContext();
//向VelocityContext中放入键值
context.put("username", "张三");
context.put("password", "123456789");
context.put("age", "20");
context.put("address", "陕西西安");
context.put("blog", "http://blogjava.net/sxyx2008");
//实例化一个StringWriter
StringWriter writer=new StringWriter();
//从vm目录下加载hello.vm模板,在eclipse工程中该vm目录与src目录平级
velocityEngine.mergeTemplate("vm/hello.vm", "gbk", context, writer);
System.out.println(writer.toString());

}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式