NVelocityメモ
- NVelocity templates and absolute paths - George V. Reilly's Technical BLog
- http://weblogs.asp.net/george_v_reilly/archive/2007/03/06/img-srchttpwwwcodegenerationnetlogosnveloc.aspx
The trick is to set file.resource.loader.path. Here's how to load C:\foo\bar\somefile.vm:
ExtendedProperties props = new ExtendedProperties(); props.AddProperty("file.resource.loader.path", new ArrayList(new string[]{".", "C:\\"})); velocity.Init(props); template = velocity.GetTemplate("foo\\bar\\somefile.vm");
ASP.NETでNVelocityを使おうとしてハマった。テンプレートエンジンNVelocityを活用してテキストを生成する:CodeZineやUsing NVelocity :: Castle Projectを参考にしたが、NVelocity.Exception.ResourceNotFoundException「Unable to find resource 'foo\\bar\\somefile.vm'」のようなエラーが出る。
上記の方法で絶対パスを指定すると動くようだ。
VelocityEngine velocity = new VelocityEngine(); ExtendedProperties props = new ExtendedProperties(); props.AddProperty("file.resource.loader.path", "C:\\"); velocity.Init(props); try { Template template = velocity.GetTemplate("foo\\bar\\somefile.vm"); VelocityContext ctx = new VelocityContext(); ctx.Put("foobar", "baz"); StringWriter sw = new StringWriter(); template.Merge(ctx, sw); Debug.WriteLine(sw.GetStringBuilder().ToString()); sw.Close(); } catch (ResourceNotFoundException ex) { Debug.WriteLine("テンプレートファイルが見つかりませんでした"); } catch (ParseErrorException ex) { Debug.WriteLine("テンプレートの解析時にエラーが発生しました"); }