Permalink
Browse files

- Added custom namespace definition for (spring-template-1.2.xsd) the…

… associated entry in NamespaceParserRegistry

- Added documentation for the spring template nvelocity implementation
  • Loading branch information...
1 parent 3c7d8ea commit c75ee591401cbcbf32ea7839e5beaef7d67b8706 @ezbz ezbz committed Jul 11, 2009
View
@@ -63,6 +63,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.Data.NHibernate21.Te
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.Data.NHibernate21.2008", "src\Spring\Spring.Data.NHibernate21\Spring.Data.NHibernate21.2008.csproj", "{E57B4652-0231-49CB-B058-87E10EFE540D}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.Template.Velocity.2008", "src\Spring\Spring.Template.Velocity\Spring.Template.Velocity.2008.csproj", "{BF3AB954-8375-407C-9E98-4C51D8072784}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.Template.Velocity.Tests", "test\Spring\Spring.Template.Velocity.Tests\Spring.Template.Velocity.Tests.csproj", "{10405837-CB67-40D8-9326-84C9383983E2}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|.NET = Debug|.NET
@@ -377,6 +381,26 @@ Global
{E57B4652-0231-49CB-B058-87E10EFE540D}.Release|Any CPU.Build.0 = Release|Any CPU
{E57B4652-0231-49CB-B058-87E10EFE540D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{E57B4652-0231-49CB-B058-87E10EFE540D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {BF3AB954-8375-407C-9E98-4C51D8072784}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {BF3AB954-8375-407C-9E98-4C51D8072784}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BF3AB954-8375-407C-9E98-4C51D8072784}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BF3AB954-8375-407C-9E98-4C51D8072784}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {BF3AB954-8375-407C-9E98-4C51D8072784}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {BF3AB954-8375-407C-9E98-4C51D8072784}.Release|.NET.ActiveCfg = Release|Any CPU
+ {BF3AB954-8375-407C-9E98-4C51D8072784}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BF3AB954-8375-407C-9E98-4C51D8072784}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BF3AB954-8375-407C-9E98-4C51D8072784}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {BF3AB954-8375-407C-9E98-4C51D8072784}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {10405837-CB67-40D8-9326-84C9383983E2}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {10405837-CB67-40D8-9326-84C9383983E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {10405837-CB67-40D8-9326-84C9383983E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {10405837-CB67-40D8-9326-84C9383983E2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {10405837-CB67-40D8-9326-84C9383983E2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {10405837-CB67-40D8-9326-84C9383983E2}.Release|.NET.ActiveCfg = Release|Any CPU
+ {10405837-CB67-40D8-9326-84C9383983E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {10405837-CB67-40D8-9326-84C9383983E2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {10405837-CB67-40D8-9326-84C9383983E2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {10405837-CB67-40D8-9326-84C9383983E2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE book [
<!ENTITY aop SYSTEM "aop.xml">
<!ENTITY aop-aspect-library SYSTEM "aop-aspect-library.xml">
@@ -17,6 +17,7 @@
<!ENTITY messaging SYSTEM "messaging.xml">
<!ENTITY msmq SYSTEM "msmq.xml">
<!ENTITY scheduling SYSTEM "scheduling.xml">
+ <!ENTITY templating SYSTEM "templating.xml">
<!ENTITY web SYSTEM "web.xml">
<!ENTITY ajax SYSTEM "ajax.xml">
<!ENTITY services SYSTEM "services.xml">
@@ -62,7 +63,7 @@
<title>The Spring.NET Framework</title>
<subtitle>Reference Documentation</subtitle>
<releaseinfo>Version 1.2.1</releaseinfo>
- <pubdate>Last Updated April xx, 2009 <ulink url="http://www.springframework.net/doc-latest/reference/html/index.html">(Latest documentation)</ulink></pubdate>
+ <pubdate>Last Updated July xx, 2009 <ulink url="http://www.springframework.net/doc-latest/reference/html/index.html">(Latest documentation)</ulink></pubdate>
<authorgroup>
<author>
<firstname>Mark</firstname>
@@ -104,6 +105,10 @@
<firstname>Choy</firstname>
<surname>Rim</surname>
</author>
+ <author>
+ <firstname>Erez</firstname>
+ <surname>Mazor</surname>
+ </author>
<author>
<firstname>The Spring</firstname>
<surname>Java Team</surname>
@@ -328,11 +333,17 @@
<xref linkend="scheduling"/>
</para>
</listitem>
+ <listitem>
+ <para>
+ <xref linkend="templating"/>
+ </para>
+ </listitem>
</itemizedlist>
</partintro>
&messaging;
&msmq;
&scheduling;
+ &templating;
</part>
<part xml:id="spring-vsnet">
<title>VS.NET Integration</title>
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+ * Copyright 2002-2008 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<chapter version="5" xml:id="templating" xmlns="http://docbook.org/ns/docbook"
+ xmlns:ns5="http://www.w3.org/1999/xhtml"
+ xmlns:ns42="http://www.w3.org/2000/svg"
+ xmlns:ns4="http://www.w3.org/1999/xlink"
+ xmlns:ns3="http://www.w3.org/1998/Math/MathML"
+ xmlns:ns="http://docbook.org/ns/docbook">
+ <title>Template Engine Support</title>
+
+ <section xml:id="templating-introduction">
+ <title>Introduction</title>
+
+ <para>The Spring Framework features integration classes for templating
+ engine support. Currently, Spring supports the <ulink
+ url="http://www.castleproject.org/others/nvelocity/index.html">NVelocity</ulink>
+ templating engine.</para>
+ </section>
+
+ <section xml:id="templating-nvelocity-dependencies">
+ <title>Dependencies</title>
+
+ <para>The Spring NVelocity support depends on the Castle project's
+ NVelocity implementation which is provided in the lib directory of the
+ spring release.</para>
+ </section>
+
+ <section xml:id="templating-nvelocity-factory">
+ <title>Using the NVelocity Factory Object</title>
+
+ <para>The NVelocity template engine is set up using a
+ <literal>IFactoryObject</literal> with optional configuration parameters
+ to define where templates reside, define logging and more.</para>
+
+ <section xml:id="templating-nvelocity-file">
+ <title>Simple file based template engine definition</title>
+
+ <para>A simple definition of the template engine:</para>
+
+ <programlisting language="myxml">&lt;!-- Simple no arg file based configuration use's NVeclocity default file resource loader --&gt;
+&lt;object id="velocityEngine" type="Spring.Template.Velocity.VelocityEngineFactoryObject, Spring.Template.Velocity" /&gt;</programlisting>
+
+ <para>The velocity engine could then be used to load and merge a local
+ template using a simple relative path:</para>
+
+ <programlisting language="csharp">StringWriter stringWriter = new StringWriter();
+Hashtable modelTable = new Hashtable();
+modelTable.Add("var1", TEST_VALUE);
+VelocityContext velocityContext = new VelocityContext(modelTable);
+velocityEngine.MergeTemplate("Template/Velocity/MyTemplate.vm", Encoding.UTF8.WebName, velocityContext, stringWriter);
+string mergedContent = stringWriter.ToString();</programlisting>
+ </section>
+
+ <section xml:id="templating-nvelocity-assembly">
+ <title>Assembly based template loading</title>
+
+ <para>When templates are packaged in an assembly, NVelocity's assembly
+ resource loader can be used to define where templates reside:</para>
+
+ <programlisting language="myxml">&lt;!-- Assembly based template loading with NVelocity assembly resource loader --&gt;
+&lt;object id="assemblyBasedVelocityEngine" type="Spring.Template.Velocity.VelocityEngineFactoryObject, Spring.Template.Velocity"&gt;
+ &lt;property name="VelocityProperties"&gt;
+ &lt;dictionary key-type="string" value-type="object"&gt;
+ &lt;entry key="resource.loader" value="assembly"/&gt;
+ &lt;entry key="assembly.resource.loader.class" value="NVelocity.Runtime.Resource.Loader.AssemblyResourceLoader"/&gt;
+ &lt;entry key="assembly.resource.loader.assembly" value="MyAssembly"/&gt;
+ &lt;/dictionary&gt;
+ &lt;/property&gt;
+&lt;/object&gt;</programlisting>
+
+ <para>Using the example above the template would be loaded using a
+ namespace syntax for the template resource:</para>
+
+ <programlisting language="csharp">velocityEngine.MergeTemplate("MyAssembly.MyNamespace.MyTemplate.vm", Encoding.UTF8.WebName, velocityContext, stringWriter);</programlisting>
+
+ <para>Using the custom namespace the same definition could be
+ simplified:</para>
+
+ <programlisting language="myxml">&lt;template:nvelocity id="velocityEngine" &gt;
+ &lt;template:resource-loader&gt;
+ &lt;template:assembly name="MyAssembly" /&gt;
+ &lt;/template:resource-loader&gt;
+&lt;/template:nvelocity&gt;</programlisting>
+ </section>
+
+ <section xml:id="templating-nvelocity-resource-loader">
+ <title>Using Spring's <literal>IResourceLoader</literal> to load
+ templates</title>
+
+ <para>In some cases Spring's resource abstraction can be beneficial to
+ load templates from a variety of resources. A spring resource loader
+ extension to the NVelocity resource loader implementation is provided
+ for this use case.</para>
+
+ <programlisting language="myxml">&lt;object id="velocityEngine" type="Spring.Template.Velocity.VelocityEngineFactoryObject, Spring.Template.Velocity" &gt;
+ &lt;property name="ResourceLoaderPath" value="file://MyTemplateFolder/AnotherFolder/" /&gt;
+&lt;/object&gt;
+</programlisting>
+
+ <para>Or with multiple locations</para>
+
+ <programlisting language="myxml">&lt;object id="velocityEngine" type="Spring.Template.Velocity.VelocityEngineFactoryObject, Spring.Template.Velocity" &gt;
+ &lt;property name="ResourceLoaderPaths" &gt;
+ &lt;list&gt;
+ &lt;value&gt;file://MyTemplateFolder/&lt;/value&gt;
+ &lt;value&gt;file://MyOtherTemplateFolder/&lt;/value&gt;
+ &lt;/list&gt;
+ &lt;/property&gt;
+&lt;/object&gt;</programlisting>
+
+ <note>
+ <para>By default spring will attempt to load resources using file
+ based template loading (useful for detection of template changes at
+ runtime). If this is not desirable you set the
+ <literal>preferFileSystemAccess</literal> property of the factory
+ object to <literal>false</literal>
+ (<literal>prefer-file-system-access="false"</literal> for custom
+ namespace use)</para>
+ </note>
+
+ <para>Using the example above when resource loader paths are defined
+ templates can be loaded using their name:</para>
+
+ <programlisting language="csharp">string mergedTemplate = VelocityEngineUtils.MergeTemplateIntostring(velocityEngine, "MyTemplate.vm", Encoding.UTF8.WebName, model);</programlisting>
+ </section>
+
+ <section xml:id="templating-nvelocity-resource-config">
+ <title>Using a custom configuration file</title>
+
+ <para>If so desired one could provide a custom configuration resource to
+ customize the NVelocity configuration:</para>
+
+ <programlisting language="myxml">&lt;object id="velocityEngine" type="Spring.Template.Velocity.VelocityEngineFactoryObject, Spring.Template.Velocity" &gt;
+ &lt;property name="ConfigLocation " value="file://Template/Velocity/config.properties" /&gt;
+&lt;/object&gt;</programlisting>
+
+ <para>
+ <note>
+ <para>You can override specific properties by providing the <literal>VelocityProperties</literal> property to the NVelocity factory object (shown above)</para>
+ </note>
+ </para>
+ </section>
+
+ <section xml:id="templating-nvelocity-resource-logging">
+
+
+ <title>Logging</title>
+
+
+
+ <para>By default Spring will override NVelocity's default
+ <literal>ILogSystem</literal> implementation with its own
+ <literal>CommonsLoggingLogSystem</literal> implementation. If this is
+ not desirable, you can specify the following property of the NVelocity
+ factory object:</para>
+
+
+
+ <programlisting language="myxml">&lt;object id="velocityEngine" type="Spring.Template.Velocity.VelocityEngineFactoryObject, Spring.Template.Velocity" &gt;
+ &lt;property name="OverrideLogging" value="false" /&gt;
+&lt;/object&gt;</programlisting>
+
+ or
+
+ <programlisting language="myxml">&lt;template:nvelocity id="velocityEngine" override-logging="false" /&gt;
+</programlisting>
+
+
+
+ <note>
+ <para>You can override specific NVelocity properties locally by
+ providing a dictionary as the <literal>VelocityProperties</literal>
+ property of the NVelocity factory object (shown above)</para>
+ </note>
+
+
+ </section>
+ </section>
+
+ <section xml:id="templating-nvelocity-resource-merging">
+ <title>Merging a template</title>
+
+ <para>Spring provides the <literal>VelocityEngineUtils</literal> utility
+ for merging templates using an engine instance:</para>
+
+ <programlisting language="myxml">string mergedTemplate = VelocityEngineUtils.MergeTemplateIntostring(velocityEngine, "MyTemplate.vm", Encoding.UTF8.WebName, model);</programlisting>
+ </section>
+
+ <section xml:id="templating-nvelocity-resource-namespace">
+ <title>Namespace</title>
+
+ <para>For convinience in defining NVelocity engine instances a custom
+ namespace is provided, for example the resource loader definition could be
+ done this way:</para>
+
+ <programlisting language="myxml">
+&lt;objects xmlns="http://www.springframework.net" xmlns:template="http://www.springframework.net/template"&gt;
+
+&lt;template:nvelocity id="customNamespaceVelocityTemplate" &gt;
+ &lt;template:resource-loader&gt;
+ &lt;template:file path="Template/Velocity/" /&gt;
+ &lt;/template:resource-loader&gt;
+&lt;/template:nvelocity&gt;
+
+&lt;/objects&gt;</programlisting>
+ </section>
+</chapter>
@@ -102,6 +102,7 @@ static NamespaceParserRegistry()
wellknownNamespaceParserTypeNames["http://www.springframework.net/nms"] = "Spring.Messaging.Nms.Config.NmsNamespaceParser, Spring.Messaging.Nms";
wellknownNamespaceParserTypeNames["http://www.springframework.net/ems"] = "Spring.Messaging.Ems.Config.EmsNamespaceParser, Spring.Messaging.Ems";
wellknownNamespaceParserTypeNames["http://www.springframework.net/validation"] = "Spring.Validation.Config.ValidationNamespaceParser, Spring.Core";
+ wellknownNamespaceParserTypeNames["http://www.springframework.net/template"] = "Spring.Template.Config.TemplateNamespaceParser, Spring.Template.Velocity";
Reset();
}
@@ -58,6 +58,7 @@
<HintPath>..\..\..\lib\Net\2.0\NVelocity.dll</HintPath>
</Reference>
<Reference Include="System" />
+ <Reference Include="System.XML" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Spring.Core\Spring.Core.2008.csproj">
@@ -66,6 +67,7 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
+ <Compile Include="Template\Config\TemplateNamespaceParser.cs" />
<Compile Include="Template\Velocity\CommonsLoggingLogSystem.cs" />
<Compile Include="Template\Velocity\SpringResourceLoader.cs" />
<Compile Include="Template\Velocity\VelocityEngineFactory.cs" />
@@ -99,6 +101,9 @@
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Template\Config\spring-template-1.2.xsd" />
+ </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
Oops, something went wrong.

0 comments on commit c75ee59

Please sign in to comment.