解决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());
}
}
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号