blob: 8a6895e2f81bf2daa61379426f48c11b138787f4 [file] [log] [blame]
<?xml version="1.0"?>
<!--
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* 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.
*/
-->
<document>
<properties>
<title>VelocityOnlyLayout</title>
</properties>
<body>
<section name="Introduction">
<p>
The VelocityECSLayout has been deprecated in Turbine 2.3. This document
is intended to help you convert your application to use the
VelocityOnlyLayout.
</p>
<p>
The VelocityOnlyLayout does not use ECS to generate the HTML page for
you. This also means that the current $page pull tool will not work with
the VelocityOnlyLayout. You will be responsible for constructing the HTML,
HEAD, BODY, etc. tags using Velocity.
</p>
<p>
Although this seems like a lot of trouble, it really isn't. All that you
really need to do is modify your layout templates. You will still use the
$page pull tool just like before. Your layout templates will also use the
$page pull tool to extract the data needed to build the HEAD and BODY
tags.
</p>
</section>
<section name="Changes to make in TR.props">
<p>
Changes the definition of the $page pull tool:
</p>
<source>
<![CDATA[
tool.request.page = org.apache.turbine.util.template.HtmlPageAttributes
]]>
</source>
<p>
Change the default layout
</p>
<source>
<![CDATA[
services.VelocityService.default.layout = VelocityOnlyLayout
]]>
</source>
</section>
<section name="Changes to your code">
<p>
<ul>
<li>$page.addAttribute(attribute,value) has been replaced with
$page.addBodyAttribute(attribute,value)</li>
<li>$page.setScript(url) has been replaced with
$page.addScript(url)</li>
<li>$page.setStyleSheet(url) has been replaced with
$page.addStyleSheet(url)</li>
<li>$page.setStyle(styleText) has been replaced with
$page.addStyle(styleText)</li>
<li>$page.setStyleSheet(url,media) has been replaced with
$page.addStyleSheet(url,media,title,type)</li>
</ul>
</p>
<p>
<em>Use of any of the deprecated methods will generate a log message
at the info level.</em>
</p>
<p>
Add the line
</p>
<source>
<![CDATA[
$page.DefaultDoctype
]]>
</source>
<p>
to your layout templates to pick up the default doctype definition from
TurbineResources.properties thus:
</p>
<source>
<![CDATA[
# Set the components of the default Doctype for use in html documents.
#
# Defaults: There are no defaults - if default.html.doctype.root.element is not
# set then no default doctype will be available.
default.html.doctype.root.element=HTML
default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
]]>
</source>
<p>
Add the line
</p>
<source>
<![CDATA[
services.VelocityService.velocimacro.library = macros/TurbineMacros.vm
]]>
</source>
<p>
to your TurbineResources.properties and it will pick up the
TurbineMacros.vm in your Turbine jar. An example of how to use
these macros follows.
</p>
<p>
Here is a sample layout template that you can use:
</p>
<source>
<![CDATA[
## Set defaults for all pages using this layout. Anything set here can
## be overridden in the screen template.
$page.setTitle("My default page title");
$page.setHttpEquiv("Content-Style-Type","text/css")
$page.addStyleSheet($content.getURI("myStyleSheet.css"))
$page.addScript($content.getURI("globalJavascriptCode.js"))
## build the HTML, HEAD, and BODY tags dynamically
$page.DefaultDoctype
<html>
#TurbineHtmlHead()
<body #TurbineHtmlBodyAttributes() >
$navigation.setTemplate("default_header.vm")
$screen_placeholder
$navigation.setTemplate("default_footer.vm")
</body>
</html>
]]>
</source>
<p>
This produces the same code as the following sample layout
template that you can use:
</p>
<source>
<![CDATA[
## Set defaults for all pages using this layout. Anything set here can
## be overridden in the screen template.
$page.setTitle("My default page title");
$page.setHttpEquiv("Content-Style-Type","text/css")
$page.addStyleSheet($content.getURI("myStyleSheet.css"))
$page.addScript($content.getURI("globalJavascriptCode.js"))
## build the HTML, HEAD, and BODY tags dynamically
$page.DefaultDoctype
<html>
<head>
#if($page.Title != "")
<title>$page.Title</title>
#end
#foreach($metaTag in $page.MetaTags.keySet())
<meta name="$metaTag" content="$page.MetaTags.get($metaTag)">
#end
#foreach($httpEquiv in $page.HttpEquivs.keySet())
<meta http-equiv="$httpEquiv" content="$page.HttpEquivs.get($httpEquiv)">
#end
#foreach($styleSheet in $page.StyleSheets)
<link rel="stylesheet" href="$styleSheet.Url"
#if($styleSheet.Type != "" ) type="$styleSheet.Type" #end
#if($styleSheet.Media != "") media="$styleSheet.Media" #end
#if($styleSheet.Title != "") title="$styleSheet.Title" #end
>
#end
#if ($page.Styles.size() > 0)
<style type="text/css">
#foreach( $style in $page.Styles )
$!style
#end
</style>
#end
#foreach($script in $page.Scripts)
<script type="text/javascript" src="$script" language="JavaScript"></script>
#end
</head>
## Construct the body tag. Iterate through the body attributes to build the opening tag
<body
#foreach($attributeName in $page.BodyAttributes.keySet())
$attributeName = "$page.BodyAttributes.get($attributeName)"
#end
>
$navigation.setTemplate("default_header.vm")
$screen_placeholder
$navigation.setTemplate("default_footer.vm")
</body>
</html>
]]>
</source>
</section>
<section name="Writing Directly To ServletOutputStream">
<p>
See
<a href="http://nagoya.apache.org/wiki/apachewiki.cgi?JakartaTurbine2/VelocityOnlyLayout">
VelocityOnlyLayout</a> on the Apache wiki for some information concerning
writing directly to ServletOutputStream.
</p>
</section>
<section name="Updates to this document">
<p>
This document is by no means complete or totally accurate. We welcome
suggestions as to how it might be improved, particularly if you have
just completed updating an application by following this howto.
</p>
</section>
</body>
</document>