解决NVelocity加载模板时出现Unable to find resource"xxx"错误
NVelocity现在属于Castle项目,相关介绍:http://www.castleproject.org/others/nvelocity/index.html
使用方法:http://www.castleproject.org/others/nvelocity/usingit.html
发现很多人在按上面的方法使用时会出现Unable to find resource"xxx"错误
解决办法:
在engine.Init(props);之前使用
props.AddProperty("file.resource.loader.path", Server.MapPath("."));
第2个参数Server.MapPath(".")指当前模板文件所在的目录,如果你的模板文件完整路径是:c:\xx\xx.vm
则应该把Server.MapPath(".")替换成c:\xx
例子代码:
myfirsttemplate.vm和NVelocityDemo.aspx在同一个目录下
1.myfirsttemplate.vm文件:
From: $from
To: $to
Subject: $subject
Hello, $customer
2.NVelocityDemo.aspx.cs代码:
using Commons.Collections;
using NVelocity;
using NVelocity.App;
using NVelocity.Context;
using System.IO;
using System.Text;
namespace webTest
{
public partial class NVelocityDemo : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
VelocityEngine engine = new VelocityEngine();
ExtendedProperties props = new ExtendedProperties();
//Server.MapPath(".")
props.AddProperty("file.resource.loader.path", Server.MapPath("."));
engine.Init(props);
Template template = engine.GetTemplate("myfirsttemplate.vm");
VelocityContext context = new VelocityContext();
context.Put("from", "somewhere");
context.Put("to", "someone");
context.Put("subject", "Welcome to NVelocity");
context.Put("customer", "jon zhao");
StringWriter writer = new StringWriter();
template.Merge(context, writer);
Response.Write(writer.GetStringBuilder().ToString());
}
}
}