解决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());

}

}

}

           

posted @ 2009-05-09 14:05  awp110  阅读(1945)  评论(0编辑  收藏  举报