ASP.NET MVC Preview 2 - NVelocityViewEngine
美工:「私がデザインしたページをめちゃくちゃにしたから、このスタイルで......」
プログラマー「くだらないこと、とっくに言ってたよ.こんなフォーマットで書かなきゃ......」
美工:「ページを修正しました.もう送りました......」
プログラマー「暇がないから、自分で変えないの?」
Velocityは何ですか.私が言う必要はありません.非常に簡単なタグまたは論理制御を使用すると、私たちのデータをアメリカのデザインページに「埋め込む」ことができます.私たちは米工に事前にデータを出力する必要がある位置を「」などと東東に表示させることができて、私たちもデータが正しく出力されているかどうかだけに関心を持って、ページの調整は私たちとほとんど関係ありません.もちろん、一定の興味を持っている美工やグループの中の新人に対して、1日か半日以内にVelocityの使い方をマスターすることができて、どうして喜んでいませんか?多くのWebサイトでは、私たちが通常プレゼンテーションに使用しているいくつかのExampleほど簡単ではないページ表示を頻繁に調整していることを知っておく必要があります.
カスタムビューエンジンを使用するには、注入位置を見つける必要があります.前のプロセス分析では、ターゲットであるControllerBuilderをロックしました.
public class GlobalApplication : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
ControllerBuilder.Current.SetControllerFactory(new NVelocityContrillerFactory());
}
}
NVelocityContrillerFactory DefaultControllerFactory, override , Controller.ViewEngine 。
public class NVelocityContrillerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(Type controllerType)
{
var controller = base.GetControllerInstance(controllerType);
(controller as Controller).ViewEngine = new NVelocityViewEngine();
return controller;
}
}
に、 たちは のビューエンジンを き めました.public class NVelocityViewEngine : IViewEngine
{
static NVelocityViewEngine()
{
Velocity.SetProperty("resource.loader", "file");
Velocity.SetProperty("file.resource.loader.path", HttpContext.Current.Server.MapPath("~"));
Velocity.SetProperty("file.resource.loader.cache", true);
//Velocity.SetProperty("file.resource.loader.modificationCheckInterval", 10L); //seconds
Velocity.SetProperty("input.encoding", "utf-8");
Velocity.Init();
}
public void RenderView(ViewContext viewContext)
{
var locator = new NVelocityViewLocator() as IViewLocator;
var templatePath = locator.GetViewLocation(viewContext, viewContext.ViewName);
var template = Velocity.GetTemplate(templatePath);
var context = new VelocityContext();
if (viewContext.ViewData != null)
{
var properties = viewContext.ViewData.GetProperties(); // , 。
foreach (var item in properties.Keys)
{
context.Put(item, properties[item]);
}
}
template.Merge(context, viewContext.HttpContext.Response.Output);
}
}
も で, でNVelocityを するほか,ViewDataについてもいくつかの を った.もちろん、 のディレクトリからテンプレートファイルを することをサポートするために、NVelocityViewLocatorをもう1つ したほうがいいです.public class NVelocityViewLocator : ViewLocator
{
public NVelocityViewLocator()
{
this.ViewLocationFormats = new[]
{
"/Views/{1}/{0}.vm",
"/Views/{1}/{0}.htm",
"/Views/{1}/{0}.html",
"/Views/Shared/{0}.vm",
"/Views/Shared/{0}.htm",
"/Views/Shared/{0}.html",
};
this.MasterLocationFormats = new string[0];
}
}
たちはもっと くの をサポートすることができます.ほほほ~~~~~~~よし、テストしてみましょう.public class HomeController : Controller
{
public void Index()
{
this.RenderView("index", new { Title = "TemplateEngine Test", Name = "Tomcat" });
}
}
~/View/Home/index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/....dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>$Title</title>
</head>
<body>
Hello, $Name!
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/....dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>TemplateEngine Test</title>
</head>
<body>
Hello, Tomcat!
</body>
</html>
なことを れ、NVelocityはCastle MonoRailのパッケージで つけることができます.