PlayRythm Demo App

A demonstration of the new PlayRythm template engine for Play! Framework (v1.2.x) based on Rythm-v1.0.0-20121110.

Click on the following links to find out the varieties of Rythm features, including: template layout management, caching, escaping, calling different tags, etc.

Template Source
@extends("main", noGoHome=true)
@set(title: "Home")
@args String title;

@cache() {

<div class="hero-unit">
    <h1>PlayRythm Demo App</h1>
    <p class="lead">A demonstration of the new <a href="http://www.playframework.org/modules/rythm">PlayRythm</a> template engine for Play! Framework (v1.2.x) based on <a href="http://www.rythmengine.com">Rythm-v@_rythmPlugin.VERSION</a>.
</div>

<div class="row">
    <div class="span12">
        <p>Click on the following links to find out the varieties of Rythm features, including: template layout management, caching, escaping, calling different tags, etc.</p>
    </div>
</div>

<div class="row examples-list">
    <div class="span4">
        <h3>Basic Features</h3>
        <ul>
            <li><a href="@url(Demo.expression())">Expression evaluation</a></li>
            <li><a href="@url(Demo.testDefaultLayoutContent())">Default layout content</a></li>
            <li><a href="@url(Demo.testDefaultEscape())">Default escape</a></li>
            <li><a href="@url(Demo.testRenderSection())">Render section</a></li>
            <li><a href="@url(Demo.testActionCall())">Call action method from view</a></li>
            <li><a href="@url(Demo.testInclude())">Include other templates</a></li>
            <li><a href="@url(Demo.testExtendsWithParams())">Extends layout template with params</a></li>
            <li><a href="@url(Demo.testExtendsWithOutParams())">Extends layout template without params</a></li>
            <li><a href="@url(Demo.javaExtensions())">Java extensions</a></li>
            <li><a href="@url(Demo.loopUtils())"><img src="/img/icon_new.gif">Loop Utils</a></li>
            <li><a href="@url(Demo.testBreakContinue())">Break continue statement</a></li>
        </ul>
    </div>
    <div class="span4">
        <h3>Tags and Inline Functions</h3>
        <ul>
            <li><a href="@url(Demo.invokeTagWithLineBreaksInParams())">Line breaks in params</a></li>
            <li><a href="@url(Demo.testInlineTag())">Inline tag</a></li>
            <li><a href="@url(Demo.inlineTagWithReturnType())">Inline tag with return type <img src="/img/icon_new.gif"></a></li>
            <li><a href="@url(Demo.testLoadTagByRelativePath())">Load tag using relative path</a></li>
            <li><a href="@url(Demo.testLoadTagUsingImportPath())">Load tag using import path</a></li>
            <li><a href="@url(Demo.testTagInvokeCallBack())">Tag invoke with callback</a></li>
            <li><a href="@url(Demo.callExtendedTag())">Call tag that extends other templates</a></li>
            <li><a href="@url(Demo.testInvoke())">Dynamic tag dispatch</a></li>
            <li><a href="@url(Demo.testTagContext())">TagContext</a></li>
            <li><a href="@url(Demo.testFastTag())">Fast tag</a></li>
            <li><a href="@url(Demo.invokeTagWithAssignment())">Invoke tag with assignment</a></li>
        </ul>
    </div>
    <div class="span4">
        <h3>Others</h3>
        <ul>
            <li><a href="@url(Demo.testCache())">Cache</a></li>
            <li><a href="@url(Demo.testTagCache())">Tag cache</a></li>
            <li><a href="@url(Demo.testCache4())">Cache4</a></li>
            <li><a href="@url(Demo.testCache4WithSessionData())">Cache4 with session data check enabled</a></li>
            <li><a href="@url(Demo.testAssign())">Assignment</a></li>
            <li><a href="@url(Demo.testChain())">Chained extension</a></li>
            <li><a href="@url(Demo.fibonacci())">Fibonacci - recursive tag invocation</a></li>
            <li><a href="@url(Demo.testSimple())">Simple template</a></li>
            <li><a href="@url(Demo.compactMode())">Compact Mode</a></li>
            <li><a href="@url(Demo.assignment())">Assignment</a></li>
            <li><a href="@url(Demo.testToString())">ToString <img src="/img/icon_new.gif"></a></li>
            <li><a href="@url(Demo.testMisc())">Miscellaneous tests</a></li>
        </ul>
    </div>
</div>

}

@include(tmpl_src)

Java Source (Rythm Generated)
import play.templates.JavaExtensions;
import controllers.*;
import models.*;
import java.util.*;
import java.io.*;

public class app_rythm_Demo_index_html__R_T_C__ extends app_rythm_main_html__R_T_C__ {//<extended_resource_key>/app/rythm/main.html</extended_resource_key>

	@Override public java.lang.String getName() {
		return "Demo.index";
	}

	@Override protected void setup() {
		if (title == null) {title=(String)_get("title");}
		if (flash == null) {flash=(play.mvc.Scope.Flash)_get("flash");}
		if (error_index == null) {error_index=(Integer)_get("error_index");}
		if (error == null) {error=(play.data.validation.Error)_get("error");}
		if (params == null) {params=(play.mvc.Scope.Params)_get("params");}
		if (lang == null) {lang=(java.lang.String)_get("lang");}
		if (messages == null) {messages=(play.i18n.Messages)_get("messages");}
		if (error_isFirst == null) {error_isFirst=(Boolean)_get("error_isFirst");}
		if (errors == null) {errors=(java.util.List<play.data.validation.Error>)_get("errors");}
		if (error_isLast == null) {error_isLast=(Boolean)_get("error_isLast");}
		if (session == null) {session=(play.mvc.Scope.Session)_get("session");}
		if (request == null) {request=(play.mvc.Http.Request)_get("request");}
		if (_rythmPlugin == null) {_rythmPlugin=(com.greenlaw110.rythm.play.RythmPlugin)_get("_rythmPlugin");}
		if (_response_encoding == null) {_response_encoding=(java.lang.String)_get("_response_encoding");}
		if (_renderArgs == null) {_renderArgs=(play.mvc.Scope.RenderArgs)_get("_renderArgs");}
		if (_rythm == null) {_rythm=(com.greenlaw110.rythm.RythmEngine)_get("_rythm");}
		if (error_parity == null) {error_parity=(java.lang.String)_get("error_parity");}
		if (_play == null) {_play=(play.Play)_get("_play");}
	}

	@Override protected void loadExtendingArgs() {
		__parent.setRenderArg("noGoHome", true);
	}

	protected String title=null;
	protected play.mvc.Scope.Flash flash=null;
	protected Integer error_index=0;
	protected play.data.validation.Error error=null;
	protected play.mvc.Scope.Params params=null;
	protected java.lang.String lang=null;
	protected play.i18n.Messages messages=null;
	protected Boolean error_isFirst=false;
	protected java.util.List<play.data.validation.Error> errors=null;
	protected Boolean error_isLast=false;
	protected play.mvc.Scope.Session session=null;
	protected play.mvc.Http.Request request=null;
	protected com.greenlaw110.rythm.play.RythmPlugin _rythmPlugin=null;
	protected java.lang.String _response_encoding=null;
	protected play.mvc.Scope.RenderArgs _renderArgs=null;
	protected com.greenlaw110.rythm.RythmEngine _rythm=null;
	protected java.lang.String error_parity=null;
	protected play.Play _play=null;

	@SuppressWarnings("unchecked") public void setRenderArgs(java.util.Map<String, Object> args) {
		if (null != args && args.containsKey("title")) this.title=(String)args.get("title");
		if (null != args && args.containsKey("flash")) this.flash=(play.mvc.Scope.Flash)args.get("flash");
		if (null != args && args.containsKey("error_index")) this.error_index=(Integer)args.get("error_index");
		if (null != args && args.containsKey("error")) this.error=(play.data.validation.Error)args.get("error");
		if (null != args && args.containsKey("params")) this.params=(play.mvc.Scope.Params)args.get("params");
		if (null != args && args.containsKey("lang")) this.lang=(java.lang.String)args.get("lang");
		if (null != args && args.containsKey("messages")) this.messages=(play.i18n.Messages)args.get("messages");
		if (null != args && args.containsKey("error_isFirst")) this.error_isFirst=(Boolean)args.get("error_isFirst");
		if (null != args && args.containsKey("errors")) this.errors=(java.util.List<play.data.validation.Error>)args.get("errors");
		if (null != args && args.containsKey("error_isLast")) this.error_isLast=(Boolean)args.get("error_isLast");
		if (null != args && args.containsKey("session")) this.session=(play.mvc.Scope.Session)args.get("session");
		if (null != args && args.containsKey("request")) this.request=(play.mvc.Http.Request)args.get("request");
		if (null != args && args.containsKey("_rythmPlugin")) this._rythmPlugin=(com.greenlaw110.rythm.play.RythmPlugin)args.get("_rythmPlugin");
		if (null != args && args.containsKey("_response_encoding")) this._response_encoding=(java.lang.String)args.get("_response_encoding");
		if (null != args && args.containsKey("_renderArgs")) this._renderArgs=(play.mvc.Scope.RenderArgs)args.get("_renderArgs");
		if (null != args && args.containsKey("_rythm")) this._rythm=(com.greenlaw110.rythm.RythmEngine)args.get("_rythm");
		if (null != args && args.containsKey("error_parity")) this.error_parity=(java.lang.String)args.get("error_parity");
		if (null != args && args.containsKey("_play")) this._play=(play.Play)args.get("_play");
		super.setRenderArgs(args);
	}

	@SuppressWarnings("unchecked") public void setRenderArgs(Object... args) {
		int _p = 0, l = args.length;
		if (_p < l) { Object v = args[_p++]; boolean isString = ("java.lang.String".equals("String") || "String".equals("String")); title = (String)(isString ? (null == v ? "" : v.toString()) : v); }
	}

	@SuppressWarnings("unchecked") @Override public void setRenderArg(String name, Object arg) {
		if ("title".equals(name)) this.title=(String)arg;
		if ("flash".equals(name)) this.flash=(play.mvc.Scope.Flash)arg;
		if ("error_index".equals(name)) this.error_index=(Integer)arg;
		if ("error".equals(name)) this.error=(play.data.validation.Error)arg;
		if ("params".equals(name)) this.params=(play.mvc.Scope.Params)arg;
		if ("lang".equals(name)) this.lang=(java.lang.String)arg;
		if ("messages".equals(name)) this.messages=(play.i18n.Messages)arg;
		if ("error_isFirst".equals(name)) this.error_isFirst=(Boolean)arg;
		if ("errors".equals(name)) this.errors=(java.util.List<play.data.validation.Error>)arg;
		if ("error_isLast".equals(name)) this.error_isLast=(Boolean)arg;
		if ("session".equals(name)) this.session=(play.mvc.Scope.Session)arg;
		if ("request".equals(name)) this.request=(play.mvc.Http.Request)arg;
		if ("_rythmPlugin".equals(name)) this._rythmPlugin=(com.greenlaw110.rythm.play.RythmPlugin)arg;
		if ("_response_encoding".equals(name)) this._response_encoding=(java.lang.String)arg;
		if ("_renderArgs".equals(name)) this._renderArgs=(play.mvc.Scope.RenderArgs)arg;
		if ("_rythm".equals(name)) this._rythm=(com.greenlaw110.rythm.RythmEngine)arg;
		if ("error_parity".equals(name)) this.error_parity=(java.lang.String)arg;
		if ("_play".equals(name)) this._play=(play.Play)arg;
		super.setRenderArg(name, arg);
	}

	@SuppressWarnings("unchecked") public void setRenderArg(int pos, Object arg) {
		int _p = 0;
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("String") || "String".equals("String")); title = (String)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.mvc.Scope.Flash") || "String".equals("play.mvc.Scope.Flash")); flash = (play.mvc.Scope.Flash)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("Integer") || "String".equals("Integer")); error_index = (Integer)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.data.validation.Error") || "String".equals("play.data.validation.Error")); error = (play.data.validation.Error)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.mvc.Scope.Params") || "String".equals("play.mvc.Scope.Params")); params = (play.mvc.Scope.Params)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("java.lang.String") || "String".equals("java.lang.String")); lang = (java.lang.String)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.i18n.Messages") || "String".equals("play.i18n.Messages")); messages = (play.i18n.Messages)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("Boolean") || "String".equals("Boolean")); error_isFirst = (Boolean)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("java.util.List<play.data.validation.Error>") || "String".equals("java.util.List<play.data.validation.Error>")); errors = (java.util.List<play.data.validation.Error>)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("Boolean") || "String".equals("Boolean")); error_isLast = (Boolean)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.mvc.Scope.Session") || "String".equals("play.mvc.Scope.Session")); session = (play.mvc.Scope.Session)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.mvc.Http.Request") || "String".equals("play.mvc.Http.Request")); request = (play.mvc.Http.Request)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("com.greenlaw110.rythm.play.RythmPlugin") || "String".equals("com.greenlaw110.rythm.play.RythmPlugin")); _rythmPlugin = (com.greenlaw110.rythm.play.RythmPlugin)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("java.lang.String") || "String".equals("java.lang.String")); _response_encoding = (java.lang.String)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.mvc.Scope.RenderArgs") || "String".equals("play.mvc.Scope.RenderArgs")); _renderArgs = (play.mvc.Scope.RenderArgs)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("com.greenlaw110.rythm.RythmEngine") || "String".equals("com.greenlaw110.rythm.RythmEngine")); _rythm = (com.greenlaw110.rythm.RythmEngine)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("java.lang.String") || "String".equals("java.lang.String")); error_parity = (java.lang.String)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.Play") || "String".equals("play.Play")); _play = (play.Play)(isString ? (null == v ? "" : v.toString()) : v); }
		if(0 == pos) setRenderArg("arg", arg);
	}



    protected String _msg(String key, Object ... params) {return play.i18n.Messages.get(key, params);}
    protected String _url(String action, Object... params) {return _url(false, action, params);}
   protected String _url(boolean isAbsolute, String action, Object... params) {
       com.greenlaw110.rythm.internal.compiler.TemplateClass tc = getTemplateClass(true);
       boolean escapeXML = (!tc.isStringTemplate() && tc.templateResource.getKey().toString().endsWith(".xml"));
       return new com.greenlaw110.rythm.play.utils.ActionBridge(isAbsolute, escapeXML).invokeMethod(action, params).toString();
   }


	@Override public com.greenlaw110.rythm.utils.TextBuilder build(){
		out().ensureCapacity(3953);

_setRenderProperty("title","Home");p("\n"); //line: 3
{ //line: 5
	java.io.Serializable s = _engine().cached("4f06fe88-108d-367c-86af-62eceb62fcff"); //line: 5
	if (null != s) { //line: 5
		p(s); //line: 5
	} else { //line: 5
		StringBuilder sbOld = getOut(); //line: 5
		StringBuilder sbNew = new StringBuilder(); //line: 5
		setOut(sbNew); //line: 5
p("\n\n<div class=\"hero-unit\">\n    <h1>PlayRythm Demo App</h1>\n    <p class=\"lead\">A demonstration of the new <a href=\"http://www.playframework.org/modules/rythm\">PlayRythm</a> template engine for Play! Framework (v1.2.x) based on <a href=\"http://www.rythmengine.com\">Rythm-v"); //line: 9

try{pe(_rythmPlugin.VERSION);} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 9
p("</a>.\n</div>\n\n<div class=\"row\">\n    <div class=\"span12\">\n        <p>Click on the following links to find out the varieties of Rythm features, including: template layout management, caching, escaping, calling different tags, etc.</p>\n    </div>\n</div>\n\n<div class=\"row examples-list\">\n    <div class=\"span4\">\n        <h3>Basic Features</h3>\n        <ul>\n            <li><a href=\""); //line: 22
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.expression", new Object[] {}))); //line: 22
p("\">Expression evaluation</a></li>\n            <li><a href=\""); //line: 23
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testDefaultLayoutContent", new Object[] {}))); //line: 23
p("\">Default layout content</a></li>\n            <li><a href=\""); //line: 24
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testDefaultEscape", new Object[] {}))); //line: 24
p("\">Default escape</a></li>\n            <li><a href=\""); //line: 25
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testRenderSection", new Object[] {}))); //line: 25
p("\">Render section</a></li>\n            <li><a href=\""); //line: 26
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testActionCall", new Object[] {}))); //line: 26
p("\">Call action method from view</a></li>\n            <li><a href=\""); //line: 27
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testInclude", new Object[] {}))); //line: 27
p("\">Include other templates</a></li>\n            <li><a href=\""); //line: 28
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testExtendsWithParams", new Object[] {}))); //line: 28
p("\">Extends layout template with params</a></li>\n            <li><a href=\""); //line: 29
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testExtendsWithOutParams", new Object[] {}))); //line: 29
p("\">Extends layout template without params</a></li>\n            <li><a href=\""); //line: 30
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.javaExtensions", new Object[] {}))); //line: 30
p("\">Java extensions</a></li>\n            <li><a href=\""); //line: 31
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.loopUtils", new Object[] {}))); //line: 31
p("\"><img src=\"/img/icon_new.gif\">Loop Utils</a></li>\n            <li><a href=\""); //line: 32
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testBreakContinue", new Object[] {}))); //line: 32
p("\">Break continue statement</a></li>\n        </ul>\n    </div>\n    <div class=\"span4\">\n        <h3>Tags and Inline Functions</h3>\n        <ul>\n            <li><a href=\""); //line: 38
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.invokeTagWithLineBreaksInParams", new Object[] {}))); //line: 38
p("\">Line breaks in params</a></li>\n            <li><a href=\""); //line: 39
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testInlineTag", new Object[] {}))); //line: 39
p("\">Inline tag</a></li>\n            <li><a href=\""); //line: 40
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.inlineTagWithReturnType", new Object[] {}))); //line: 40
p("\">Inline tag with return type <img src=\"/img/icon_new.gif\"></a></li>\n            <li><a href=\""); //line: 41
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testLoadTagByRelativePath", new Object[] {}))); //line: 41
p("\">Load tag using relative path</a></li>\n            <li><a href=\""); //line: 42
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testLoadTagUsingImportPath", new Object[] {}))); //line: 42
p("\">Load tag using import path</a></li>\n            <li><a href=\""); //line: 43
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testTagInvokeCallBack", new Object[] {}))); //line: 43
p("\">Tag invoke with callback</a></li>\n            <li><a href=\""); //line: 44
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.callExtendedTag", new Object[] {}))); //line: 44
p("\">Call tag that extends other templates</a></li>\n            <li><a href=\""); //line: 45
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testInvoke", new Object[] {}))); //line: 45
p("\">Dynamic tag dispatch</a></li>\n            <li><a href=\""); //line: 46
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testTagContext", new Object[] {}))); //line: 46
p("\">TagContext</a></li>\n            <li><a href=\""); //line: 47
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testFastTag", new Object[] {}))); //line: 47
p("\">Fast tag</a></li>\n            <li><a href=\""); //line: 48
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.invokeTagWithAssignment", new Object[] {}))); //line: 48
p("\">Invoke tag with assignment</a></li>\n        </ul>\n    </div>\n    <div class=\"span4\">\n        <h3>Others</h3>\n        <ul>\n            <li><a href=\""); //line: 54
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testCache", new Object[] {}))); //line: 54
p("\">Cache</a></li>\n            <li><a href=\""); //line: 55
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testTagCache", new Object[] {}))); //line: 55
p("\">Tag cache</a></li>\n            <li><a href=\""); //line: 56
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testCache4", new Object[] {}))); //line: 56
p("\">Cache4</a></li>\n            <li><a href=\""); //line: 57
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testCache4WithSessionData", new Object[] {}))); //line: 57
p("\">Cache4 with session data check enabled</a></li>\n            <li><a href=\""); //line: 58
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testAssign", new Object[] {}))); //line: 58
p("\">Assignment</a></li>\n            <li><a href=\""); //line: 59
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testChain", new Object[] {}))); //line: 59
p("\">Chained extension</a></li>\n            <li><a href=\""); //line: 60
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.fibonacci", new Object[] {}))); //line: 60
p("\">Fibonacci - recursive tag invocation</a></li>\n            <li><a href=\""); //line: 61
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testSimple", new Object[] {}))); //line: 61
p("\">Simple template</a></li>\n            <li><a href=\""); //line: 62
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.compactMode", new Object[] {}))); //line: 62
p("\">Compact Mode</a></li>\n            <li><a href=\""); //line: 63
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.assignment", new Object[] {}))); //line: 63
p("\">Assignment</a></li>\n            <li><a href=\""); //line: 64
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testToString", new Object[] {}))); //line: 64
p("\">ToString <img src=\"/img/icon_new.gif\"></a></li>\n            <li><a href=\""); //line: 65
p(s().raw(new com.greenlaw110.rythm.play.utils.ActionBridge(false,false).invokeMethod("Demo.testMisc", new Object[] {}))); //line: 65
p("\">Miscellaneous tests</a></li>\n        </ul>\n    </div>\n</div>\n\n"); //line: 70
		s = sbNew.toString(); //line: 5
		setOut(sbOld); //line: 5
		_engine().cache("4f06fe88-108d-367c-86af-62eceb62fcff",s,null); //line: 5
		p(s); //line: 5
	} //line: 5
} //line: 5
 //line: 70
p("\n\n"); //line: 72
 //line: 3

_startSection("tmpl_src");

try{pe((getTemplateClass(false).getTemplateSource()));} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 4
p("\n"); //line: 5

_endSection(); //line: 5
p("\n\n"); //line: 7

_startSection("java_src");

try{pe((getTemplateClass(false).javaSource));} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 8
p("\n"); //line: 9

_endSection(); //line: 9
 //line: 73

		return this;
	}

}