cocoon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cross...@apache.org
Subject svn commit: r345438 [110/286] - in /cocoon/site/site/2.1: ./ developing/ developing/portal/ developing/portal/coplets/ developing/webapps/ developing/webapps/authentication/ faq/ howto/ installing/ plan/ plan/documentation/ plan/otherplanning/ plan/ove...
Date Fri, 18 Nov 2005 04:13:22 GMT
Added: cocoon/site/site/2.1/userdocs/binding.html
URL: http://svn.apache.org/viewcvs/cocoon/site/site/2.1/userdocs/binding.html?rev=345438&view=auto
==============================================================================
--- cocoon/site/site/2.1/userdocs/binding.html (added)
+++ cocoon/site/site/2.1/userdocs/binding.html Thu Nov 17 20:00:02 2005
@@ -0,0 +1,2285 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta content="Apache Forrest" name="Generator">
+<meta name="Forrest-version" content="0.8-dev">
+<meta name="Forrest-skin-name" content="pelt">
+<title>Binding Framework</title>
+<link type="text/css" href="../../skin/basic.css" rel="stylesheet">
+<link media="screen" type="text/css" href="../../skin/screen.css" rel="stylesheet">
+<link media="print" type="text/css" href="../../skin/print.css" rel="stylesheet">
+<link type="text/css" href="../../skin/profile.css" rel="stylesheet">
+<script src="../../skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="../../skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="../../skin/fontsize.js" language="javascript" type="text/javascript"></script>
+<link rel="shortcut icon" href="../../images/cocoon.ico">
+</head>
+<body onload="init()">
+<script type="text/javascript">ndeSetTextSize();</script>
+<div id="top">
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+<a href="http://www.apache.org/">apache</a> &gt; <a href="http://cocoon.apache.org/">cocoon</a><script src="../../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
+</div>
+<!--+
+    |header
+    +-->
+<div class="header">
+<!--+
+    |start group logo
+    +-->
+<div class="grouplogo">
+<a href="http://www.apache.org/"><img class="logoImage" alt="Apache" src="../../images/cocoon-project-logo.png" title="The Apache Software Foundation"></a>
+</div>
+<!--+
+    |end group logo
+    +-->
+<!--+
+    |start Project Logo
+    +-->
+<div class="projectlogo">
+<a href="http://cocoon.apache.org/"><img class="logoImage" alt="Apache Cocoon" src="../../images/cocoon-logo.gif" title="Apache Cocoon"></a>
+</div>
+<!--+
+    |end Project Logo
+    +-->
+<!--+
+    |start Search
+    +-->
+<div class="searchbox">
+<form action="http://www.google.com/search" method="get" class="roundtopsmall">
+<input value="cocoon.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
+                    <input name="Search" value="Search" type="submit">
+</form>
+</div>
+<!--+
+    |end search
+    +-->
+<!--+
+    |start Tabs
+    +-->
+<ul id="tabs">
+<li>
+<a class="base-not-selected" href="../../2.1/index.html">Home</a>
+</li>
+</ul>
+<!--+
+    |end Tabs
+    +-->
+</div>
+</div>
+<div id="main">
+<div id="publishedStrip">
+<!--+
+    |start Subtabs
+    +-->
+<div id="level2tabs"></div>
+<!--+
+    |end Endtabs
+    +-->
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+             
+             &nbsp;
+           </div>
+<!--+
+    |start Menu, mainarea
+    +-->
+<!--+
+    |start Menu
+    +-->
+<div id="menu">
+<div onclick="SwitchMenu('menu_1.1', '../../skin/')" id="menu_1.1Title" class="menutitle">About</div>
+<div id="menu_1.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/index.html">Index</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/features.html">Features</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/news.html">News</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/license.html">License</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/mirror.cgi">Download</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.2', '../../skin/')" id="menu_selected_1.2Title" class="menutitle" style="background-image: url('../../skin/images/chapter_open.gif');">Documentation</div>
+<div id="menu_selected_1.2" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="../../2.1/introduction.html">Introduction</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.2', '../../skin/')" id="menu_1.2.2Title" class="menutitle">Tracks</div>
+<div id="menu_1.2.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/tracks/index.html">Introduction</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/tracks/first-steps-track.html">First steps</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/tracks/web-publishing-track.html">Web publishing</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.3', '../../skin/')" id="menu_1.2.3Title" class="menutitle">Installation</div>
+<div id="menu_1.2.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="http://cocoon.apache.org/mirror.cgi">Download</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/installing/index.html">Intro</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/installing/requirements.html">System requirements</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/installing/updating-older.html">Updating to version 2.1.5</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/installing/jars.html">Jars</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/installing/tests.html">Overview</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../2.1/overview.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.2.5', '../../skin/')" id="menu_selected_1.2.5Title" class="menutitle" style="background-image: url('../../skin/images/chapter_open.gif');">User Guide</div>
+<div id="menu_selected_1.2.5" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="../../2.1/userdocs/index.html">User Documentation</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.2', '../../skin/')" id="menu_1.2.5.2Title" class="menutitle">Concepts</div>
+<div id="menu_1.2.5.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/index.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.2.2', '../../skin/')" id="menu_1.2.5.2.2Title" class="menutitle">Sitemap</div>
+<div id="menu_1.2.5.2.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/sitemap.html">Section Home</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/sitemap/sitemap-examples.html">Example sitemap snippets</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/views.html">Views</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/caching.html">Caching</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/actions.html">Actions</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/matchers_selectors.html">Matchers and Selectors</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/catalog.html">Entity Catalogs</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/mrustore.html">MRUMemoryStore</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/persistence.html">Persistence</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/storejanitor.html">StoreJanitor</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/xmlsearching.html">XML Searching</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/validation.html">XML Validation</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/databases.html">Databases</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/modules.html">Modules</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/modules-ref.html">Modules Reference</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/redirection.html">Redirection</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/profiler.html">Profiler</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/concepts/errorhandling.html">Error Handling</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3', '../../skin/')" id="menu_1.2.5.3Title" class="menutitle">Sitemap Components</div>
+<div id="menu_1.2.5.3" class="menuitemgroup">
+<div onclick="SwitchMenu('menu_1.2.5.3.1', '../../skin/')" id="menu_1.2.5.3.1Title" class="menutitle">Generators</div>
+<div id="menu_1.2.5.3.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/generators.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.1.2', '../../skin/')" id="menu_1.2.5.3.1.2Title" class="menutitle">Default</div>
+<div id="menu_1.2.5.3.1.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/default/file-generator.html">File Generator</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.1.3', '../../skin/')" id="menu_1.2.5.3.1.3Title" class="menutitle">Core</div>
+<div id="menu_1.2.5.3.1.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/calendar-generator.html">Calendar Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/directory-generator.html">Directory Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/file-generator.html">File Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/imagedirectory-generator.html">Imagedirectory Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/jx-generator.html">Jx Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/linkstatus-generator.html">Linkstatus Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/mp3directory-generator.html">MP3directory Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/error-generator.html">Notifying Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/request-generator.html">Request Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/sessionattribute-generator.html">SessionAttribute Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/status-generator.html">Status Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/stream-generator.html">Stream Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/xpathdirectory-generator.html">Xpathdirectory Generator</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.1.4', '../../skin/')" id="menu_1.2.5.3.1.4Title" class="menutitle">Optional</div>
+<div id="menu_1.2.5.3.1.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/extractor-generator.html">Fragment Extractor Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/html-generator.html">HTML Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/jsp-generator.html">JSP Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/php-generator.html">PHP Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/profile-generator.html">Profile Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/script-generator.html">Script Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/search-generator.html">Search Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/serverpages-generator.html">Server Pages Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/velocity-generator.html">Velocity Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/wsproxy-generator.html">Web Service Proxy Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/xmldbcollection-generator.html">XML:DB Collection Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/xmldb-generator.html">XML:DB Generator</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.2', '../../skin/')" id="menu_1.2.5.3.2Title" class="menutitle">Transformers</div>
+<div id="menu_1.2.5.3.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/transformers.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.2.2', '../../skin/')" id="menu_1.2.5.3.2.2Title" class="menutitle">Default</div>
+<div id="menu_1.2.5.3.2.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/default/xslt-transformer.html">XSLT Transformer</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.2.3', '../../skin/')" id="menu_1.2.5.3.2.3Title" class="menutitle">Core</div>
+<div id="menu_1.2.5.3.2.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/extractor-transformer.html">Fragment Extractor Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/i18nTransformer.html">I18n Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/jpath-transformer.html">JPath Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/log-transformer.html">Log Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/filter-transformer.html">Filter Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/readdomsession-transformer.html">Read DOM Session Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/rolefilter-transformer.html">RoleFilter Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/simpleform-transformer.html">SimpleForm Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/simpleforminstance-transformer.html">SimpleFormInstance Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/writedomsession-transformer.html">Write DOM Session Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/xinclude-transformer.html">Xinclude Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/cinclude-transformer.html">Cinclude Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/encodeurl-transformer.html">EncodeUrl Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/sourcewriting-transformer.html">Sourcewriting Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/augment-transformer.html">Augment Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/jx-template-transformer.html">JX Template Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/xslt-transformer.html">XSLT Transformer</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.2.4', '../../skin/')" id="menu_1.2.5.3.2.4Title" class="menutitle">Optional</div>
+<div id="menu_1.2.5.3.2.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/ldap-transformer.html">LDAP Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/lexer-transformer.html">Lexical Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/parser-transformer.html">Parser Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/pattern-transformer.html">Pattern Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/session.html">Session Transformer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/sql-transformer.html">SQL Transformer</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.3', '../../skin/')" id="menu_1.2.5.3.3Title" class="menutitle">Serializers</div>
+<div id="menu_1.2.5.3.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/serializers.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.3.2', '../../skin/')" id="menu_1.2.5.3.3.2Title" class="menutitle">Default</div>
+<div id="menu_1.2.5.3.3.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/default/html-serializer.html">HTML Serializer</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.3.3', '../../skin/')" id="menu_1.2.5.3.3.3Title" class="menutitle">Core</div>
+<div id="menu_1.2.5.3.3.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/html-serializer.html">HTML Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/xhtml-serializer.html">XHTML Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/xml-serializer.html">XML Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/text-serializer.html">Text Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/wap-serializer.html">WAP/WML Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/svg-serializer.html">SVG Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/svgxml-serializer.html">SVG/XML Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/svgjpeg-serializer.html">SVG/JPEG Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/svgpng-serializer.html">SVG/PNG Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/svgtiff-serializer.html">SVG/TIFF Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/vrml-serializer.html">VRML Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/link-serializer.html">Link Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/ziparchive-serializer.html">Zip archive Serializer</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.3.4', '../../skin/')" id="menu_1.2.5.3.3.4Title" class="menutitle">Optional</div>
+<div id="menu_1.2.5.3.3.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/pdf-serializer.html">PDF Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/ps-serializer.html">PS Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/pcl-serializer.html">PCL Serializer</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/xls-serializer.html">HSSF (XLS) Serializer</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.4', '../../skin/')" id="menu_1.2.5.3.4Title" class="menutitle">Matchers</div>
+<div id="menu_1.2.5.3.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/matchers.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.4.2', '../../skin/')" id="menu_1.2.5.3.4.2Title" class="menutitle">Default</div>
+<div id="menu_1.2.5.3.4.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/default/wildcarduri-matcher.html">WildCard URI Matcher</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.4.3', '../../skin/')" id="menu_1.2.5.3.4.3Title" class="menutitle">Core</div>
+<div id="menu_1.2.5.3.4.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/core/wildcarduri-matcher.html">WildCard URI Matcher</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/core/wildcardheader-matcher.html">WildCard Header Matcher</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.4.4', '../../skin/')" id="menu_1.2.5.3.4.4Title" class="menutitle">Optional</div>
+<div id="menu_1.2.5.3.4.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/optional/template-matcher.html">Template Matcher</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.5', '../../skin/')" id="menu_1.2.5.3.5Title" class="menutitle">Selectors</div>
+<div id="menu_1.2.5.3.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/selectors.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.5.2', '../../skin/')" id="menu_1.2.5.3.5.2Title" class="menutitle">Default</div>
+<div id="menu_1.2.5.3.5.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/default/browser-selector.html">Browser Selector</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.5.3', '../../skin/')" id="menu_1.2.5.3.5.3Title" class="menutitle">Core</div>
+<div id="menu_1.2.5.3.5.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/browser-selector.html">Browser Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/host-selector.html">Host Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/parameter-selector.html">Parameter Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/requestattribute-selector.html">Request Attribute Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/requestmethod-selector.html">Request Method Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/requestparameter-selector.html">Request Parameter Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/resourceexists-selector.html">Resource Exists Selector</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/regular-expression-header-selector.html">Regular-expression Header Selector</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.5.4', '../../skin/')" id="menu_1.2.5.3.5.4Title" class="menutitle">Scratchpad</div>
+<div id="menu_1.2.5.3.5.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/scratchpad/date-selector.html">Date Selector</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.6', '../../skin/')" id="menu_1.2.5.3.6Title" class="menutitle">Actions</div>
+<div id="menu_1.2.5.3.6" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/actions.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/database-actions.html">Database</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.6.3', '../../skin/')" id="menu_1.2.5.3.6.3Title" class="menutitle">Optional</div>
+<div id="menu_1.2.5.3.6.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/optional/sendmail-action.html">Sendmail Action</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/optional/session-action.html">Session Action</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/optional/script-action.html">Script Action</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.7', '../../skin/')" id="menu_1.2.5.3.7Title" class="menutitle">Readers</div>
+<div id="menu_1.2.5.3.7" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/readers.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.7.2', '../../skin/')" id="menu_1.2.5.3.7.2Title" class="menutitle">Default</div>
+<div id="menu_1.2.5.3.7.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/default/resource-reader.html">Resource Reader</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.7.3', '../../skin/')" id="menu_1.2.5.3.7.3Title" class="menutitle">Core</div>
+<div id="menu_1.2.5.3.7.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/core/image-reader.html">Image Reader</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/core/resource-reader.html">Resource Reader</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.7.4', '../../skin/')" id="menu_1.2.5.3.7.4Title" class="menutitle">Optional</div>
+<div id="menu_1.2.5.3.7.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/optional/axisrpc-reader.html">AxisRPC Reader</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/optional/database-reader.html">Database Reader</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/optional/jsp-reader.html">JSP Reader</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.3.7.5', '../../skin/')" id="menu_1.2.5.3.7.5Title" class="menutitle">Scratchpad</div>
+<div id="menu_1.2.5.3.7.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/scratchpad/directoryziparchiver-reader.html">Directory ZIP Archiver</a>
+</div>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.4', '../../skin/')" id="menu_1.2.5.4Title" class="menutitle">Flow</div>
+<div id="menu_1.2.5.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/flow/index.html">Introduction</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/flow/continuations.html">Continuations</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/flow/how-does-it-work.html">How does it work?</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/flow/using.html">Usage</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/flow/tutor.html">Tutorial</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/flow/sitemap.html">Sitemap</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/flow/api.html">Flowscript</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/flow/java.html">Calling Java</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/flow/views.html">Views</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/flow/jxtemplate.html">JXTemplate</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/flow/jpath.html">JPath</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/flow/velocity.html">Velocity</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.2.5.5', '../../skin/')" id="menu_selected_1.2.5.5Title" class="menutitle" style="background-image: url('../../skin/images/chapter_open.gif');">Cocoon Forms</div>
+<div id="menu_selected_1.2.5.5" class="selectedmenuitemgroup" style="display: block;">
+<div onclick="SwitchMenu('menu_1.2.5.5.1', '../../skin/')" id="menu_1.2.5.5.1Title" class="menutitle">Basics</div>
+<div id="menu_1.2.5.5.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/basics/index.html">Introduction</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/basics/sample.html">Sample</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/basics/improving_sample.html">Improving the sample</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.5.2', '../../skin/')" id="menu_1.2.5.5.2Title" class="menutitle">Widgets</div>
+<div id="menu_1.2.5.5.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_form.html">form</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_field.html">field</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_multivaluefield.html">multivaluefield</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_booleanfield.html">booleanfield</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_repeater.html">repeater</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_output.html">output</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_submit.html">submit</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_action.html">action</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_repeater_action.html">repeater-action</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_row_action.html">row-action</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_aggregatefield.html">aggregatefield</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_upload.html">upload</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_messages.html">messages</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_imagemap.html">imagemap</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_tree.html">tree</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_group.html">group/struct</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_union.html">union</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgets/widget_class.html">class/new</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.5.3', '../../skin/')" id="menu_1.2.5.5.3Title" class="menutitle">Widget Concepts</div>
+<div id="menu_1.2.5.5.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgetconcepts/validation.html">Validation</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgetconcepts/eventhandling.html">Event Handling</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgetconcepts/datatypes.html">Datatypes</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgetconcepts/selectionlists.html">Selection lists</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/widgetconcepts/widgetstates.html">Widget states</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.5.4', '../../skin/')" id="menu_1.2.5.5.4Title" class="menutitle">Form Publishing</div>
+<div id="menu_1.2.5.5.4" class="menuitemgroup">
+<div onclick="SwitchMenu('menu_1.2.5.5.4.1', '../../skin/')" id="menu_1.2.5.5.4.1Title" class="menutitle">Templating</div>
+<div id="menu_1.2.5.5.4.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/publishing/templating.html">Section Home</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/publishing/templating/templategenerator.html">Template Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/publishing/templating/templatetransformer.html">Template Transformer</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/publishing/formsgenerator.html">Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/publishing/xslt.html">XSLT</a>
+</div>
+</div>
+<div class="menupage">
+<div class="menupagetitle">Binding Framework</div>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/xmlbinding.html">Simple XML Binding</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.5.7', '../../skin/')" id="menu_1.2.5.5.7Title" class="menutitle">API</div>
+<div id="menu_1.2.5.5.7" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/api/api_javascript.html">Javascript (Flowscript)</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/api/api_java.html">Java</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/formlibraries.html">Form libraries</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/ajax.html">Ajax</a>
+</div>
+<div class="menuitem">
+<a href="http://wiki.apache.org/cocoon/Forms">Forms @ Wiki</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.6', '../../skin/')" id="menu_1.2.5.6Title" class="menutitle">XSP</div>
+<div id="menu_1.2.5.6" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/index.html">Overview</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.6.2', '../../skin/')" id="menu_1.2.5.6.2Title" class="menutitle">XSP</div>
+<div id="menu_1.2.5.6.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/xsp.html">Section Home</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/xsp/logicsheet.html">XSP Guide</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/xsp/xsp-internals.html">XSP Internals</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/xsp/logicsheet-concepts.html">XSP Logicsheets</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/xsp/sessions.html">Sessions</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.6.3', '../../skin/')" id="menu_1.2.5.6.3Title" class="menutitle">Logicsheets</div>
+<div id="menu_1.2.5.6.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/logicsheets/request.html">Request</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/logicsheets/session.html">Session</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/logicsheets/esql.html">ESQL</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/logicsheets/logicsheet-forms.html">Forms</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/logicsheets/sendmail.html">Sendmail</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.5.7', '../../skin/')" id="menu_1.2.5.7Title" class="menutitle">Offline</div>
+<div id="menu_1.2.5.7" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/userdocs/offline/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/offline/cli.html">Command Line</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/offline/configuration.html">CLI Configuration</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/offline/ant.html">Ant</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/userdocs/offline/bean.html">Cocoon Bean</a>
+</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.6', '../../skin/')" id="menu_1.2.6Title" class="menutitle">Developer's Guide</div>
+<div id="menu_1.2.6" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/developing/index.html">Index</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.6.2', '../../skin/')" id="menu_1.2.6.2Title" class="menutitle">Concepts</div>
+<div id="menu_1.2.6.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/developing/httprequest.html">Internals</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/extending.html">Extending</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/avalon.html">Avalon</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/source.html">Source Handling</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/stores.html">Stores</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/datasources.html">Using Databases</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/parent-component-manager.html">Parent CM</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/deliquick.html">DELI Quick Start</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/deli.html">DELI</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.6.3', '../../skin/')" id="menu_1.2.6.3Title" class="menutitle">Developing Webapps</div>
+<div id="menu_1.2.6.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/session.html">Sessions</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/contexts.html">Session Contexts</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.6.3.4', '../../skin/')" id="menu_1.2.6.3.4Title" class="menutitle">Authentication</div>
+<div id="menu_1.2.6.3.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/authentication.html">Section Home</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/authentication/authentication-handler.html">The Authentication Handler</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/authentication/authenticating_user.html">Authenticating a User</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/authentication/user_management.html">User Management</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/authentication/application_management.html">Application Management</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/authentication/module_management.html">Module Management</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/authentication/user_administration.html">User Administration</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/authentication/summary.html">Configuration Summary</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/authentication/pipeline_patterns.html">Pipeline Patterns</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/forms.html">Simple Forms</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/webapps/portal.html">Portal FW</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.6.4', '../../skin/')" id="menu_1.2.6.4Title" class="menutitle">Building a portal using the Portal Engine</div>
+<div id="menu_1.2.6.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/developing/portal/index.html">Index</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/portal/portal-block.html">Portal Engine</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.6.4.3', '../../skin/')" id="menu_1.2.6.4.3Title" class="menutitle">Configuring Coplets</div>
+<div id="menu_1.2.6.4.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/developing/portal/coplets.html">Section Home</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/portal/coplets/uricoplet.html">The URICoplet</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/portal/coplets/cachinguricoplet.html">The CachingURICoplet</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/portal/layout_skins.html">Layout and Skins</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/portal/events.html">Event Handling</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/portal/profiles.html">Profiles</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/portal/wsrp.html">WSRP Support</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/portal/authentication.html">Authentication</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/portal/forms.html">Form handling</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/portal/basket.html">A Basket</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../2.1/developing/web3.html">Connect to SAP R/3</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/2.1/apidocs/index.html">API (Javadoc)</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.7', '../../skin/')" id="menu_1.2.7Title" class="menutitle">Tutorials</div>
+<div id="menu_1.2.7" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/tutorial/index.html">Index</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/tutorial/tutorial-develop-webapp.html">WebApp</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/tutorial/tutorial-generator.html">Custom Generator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/tutorial/tutorial-shots.html">Tutorial screenshots</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/tutorial/tutorial-rmi-generator.html">RMIServer</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.8', '../../skin/')" id="menu_1.2.8Title" class="menutitle">FAQ</div>
+<div id="menu_1.2.8" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/faq/index.html">Index</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-install.html">Install</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-configure-environment.html">Configure</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-cvs.html">CVS/SVN</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-configure-c2.html">Configure C2</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-databases.html">Databases</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-xsp.html">XSP</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-xslt.html">XSLT</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-debugging.html">Debugging</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-sitemap.html">Sitemap</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-generators.html">Generators</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-transformers.html">Transformers</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-serializers.html">Serializers</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-matchers.html">Matchers</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-selectors.html">Selectors</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-actions.html">Actions</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/faq/faq-aggregators.html">Aggregators</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2.9', '../../skin/')" id="menu_1.2.9Title" class="menutitle">How Tos</div>
+<div id="menu_1.2.9" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/howto/index.html">Index</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/howto/howto-explore-samples.html">Samples</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/howto/howto-paginator-transformer.html">Paginator</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/howto/howto-html-pdf-publishing.html">HTML-PDF</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/howto/wsproxy-generator.html">Web Syndication</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/howto/howto-flow-debugger.html">Flow Debugger</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/howto/howto-author-howto.html">Author How-To</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/howto/howto-author-faq.html">Author FAQ</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/howto/howto-author-snippet.html">Author Snippet</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/howto/howto-author-core-docs.html">Author Docs</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/howto/howto-patch.html">Prepare patch</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/howto/howto-bugzilla.html">Bugzilla</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../../2.1/performancetips.html">Performance</a>
+</div>
+<div onclick="SwitchMenu('menu_1.2.11', '../../skin/')" id="menu_1.2.11Title" class="menutitle">Snippets</div>
+<div id="menu_1.2.11" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/snippet/index.html">Index</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/snippet/snippet-xslt-options.html">XSLT Processor Options</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/snippet/snippet-internal-pipeline.html">Internal Pipeline</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="http://wiki.apache.org/cocoon/">Wiki Docs</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3', '../../skin/')" id="menu_1.3Title" class="menutitle">Status</div>
+<div id="menu_1.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/changes.html">Changes</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/todo.html">To Do</a>
+</div>
+<div onclick="SwitchMenu('menu_1.3.3', '../../skin/')" id="menu_1.3.3Title" class="menutitle">Planning Notes</div>
+<div id="menu_1.3.3" class="menuitemgroup">
+<div onclick="SwitchMenu('menu_1.3.3.1', '../../skin/')" id="menu_1.3.3.1Title" class="menutitle">Overview</div>
+<div id="menu_1.3.3.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/plan/overview/index.html">Planning Overview</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/plan/overview/roadmap.html">Roadmap</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3.3.2', '../../skin/')" id="menu_1.3.3.2Title" class="menutitle">Documentation</div>
+<div id="menu_1.3.3.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/plan/documentation/doc.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/plan/documentation/linkstatus.html">Fix broken links</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3.3.3', '../../skin/')" id="menu_1.3.3.3Title" class="menutitle">Other Planning</div>
+<div id="menu_1.3.3.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/plan/otherplanning/release.html">Release Plan</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/plan/otherplanning/samples.html">Cocoon Samples</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/plan/otherplanning/proposed-toc.html">Proposed TOC</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/plan/otherplanning/updating.html">Updating Cocoon</a>
+</div>
+</div>
+</div>
+<div class="menuitem">
+<a href="http://issues.apache.org/jira/browse/COCOON">Patch queue</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.4', '../../skin/')" id="menu_1.4Title" class="menutitle">Community</div>
+<div id="menu_1.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../../2.1/bylaws-addendum.html">Cocoon Bylaws</a>
+</div>
+<div class="menuitem">
+<a href="../../2.1/who.html">Hall of Fame</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/community/contrib.html">Contributing</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/community/mail-lists.html">Mail Lists</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/community/mail-archives.html">Mail Archives</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.5', '../../skin/')" id="menu_1.5Title" class="menutitle">Project</div>
+<div id="menu_1.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="http://issues.apache.org/jira/browse/COCOON">Bug Database</a>
+</div>
+<div class="menuitem">
+<a href="http://svn.apache.org/viewcvs.cgi/cocoon/branches/BRANCH_2_1_X/?root=Apache-SVN">Code Repository</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/mirror.cgi#nightly">Dev Snapshots</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.6', '../../skin/')" id="menu_1.6Title" class="menutitle">Other Releases</div>
+<div id="menu_1.6" class="menuitemgroup">
+<div class="menuitem">
+<a href="http://cocoon.apache.org/1.x/">Cocoon 1.x</a>
+</div>
+<div class="menuitem">
+<a href="http://cocoon.apache.org/2.0/">Cocoon 2.0</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.7', '../../skin/')" id="menu_1.7Title" class="menutitle">External</div>
+<div id="menu_1.7" class="menuitemgroup">
+<div class="menuitem">
+<a href="http://wiki.apache.org/cocoon/GT2005Hackaton">2005 Get Together</a>
+</div>
+</div>
+<div id="credit"></div>
+<div id="roundbottom">
+<img style="display: none" class="corner" height="15" width="15" alt="" src="../../skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
+<!--+
+  |alternative credits
+  +-->
+<div id="credit2">
+<a href="http://apachecon.com/"><img border="0" title="ApacheCon US 2005" alt="ApacheCon US 2005 - logo" src="http://apache.org/images/ac2005us_blue_125x125.jpg" style="width: 125px;height: 125px;"></a>
+</div>
+</div>
+<!--+
+    |end Menu
+    +-->
+<!--+
+    |start content
+    +-->
+<div id="content">
+<h1>Binding Framework</h1>
+<a name="N10007"></a><a name="Intro"></a>
+<h2 class="h3">Intro</h2>
+<div class="section">
+<p>Likely you will want to use CForms to "edit stuff", such as the properties of
+a bean or data from an XML document (we'll simply use the term object to refer
+to either of these). This supposes that before you show the form, you copy the
+data from the object to the form, and after the form has been validated, you
+copy the data in the form back to the object. To avoid having to write actual
+code for this, a binding framework is available.</p>
+<p>The same illustration as in the introduction, but now extended with the
+binding, can be viewed <a href="../../2.1/">here</a>.</p>
+<p>The basic definition of a binding is as follows (if you don't know Java, just
+ignore this):</p>
+<pre>public interface Binding {
+    public void loadFormFromModel(Widget frmModel, Object objModel);
+    public void saveFormToModel(Widget frmModel, Object objModel);
+}</pre>
+<p>A binding can work with any object and can perform the binding in any
+possible way. Currently one implementation is available, based on
+<a class="external" href="http://jakarta.apache.org/commons/jxpath/index.html">JXPath</a>. JXPath
+allows to address data in both beans and XML documents using
+<a class="external" href="http://www.w3.org/TR/xpath">XPath</a> expressions, so this binding
+implementation can be used both with beans and XML documents. The rest of this
+document will focus on this implementation.</p>
+<p>The binding is configured using an XML file. This XML file contains elements
+in the fb namespace (Forms Binding):</p>
+<pre>http://apache.org/cocoon/forms/1.0#binding</pre>
+</div>
+<a name="N10025"></a><a name="What+does+a+binding+file+look+like%3F"></a>
+<h2 class="h3">What does a binding file look like?</h2>
+<div class="section">
+<p>To give you an idea of what a binding file looks like, below a very simple
+example is shown.</p>
+<pre>&lt;fb:context xmlns:fb="http://apache.org/cocoon/forms/1.0#binding" path="/" &gt;
+    &lt;fb:value id="firstname" path="firstName"/&gt;
+    &lt;fb:value id="lastname" path="lastName"/&gt;
+    &lt;fb:value id="email" path="email"/&gt;
+&lt;/fb:context&gt;</pre>
+<p>The id attribute identifies the widget. The path attribute is the address of
+the items in the target object (a Javabean or an XML document). The paths can be
+arbitrary JXPath expressions.</p>
+<p>[Convention] Let's call all elements in the fb namespace "binding elements".
+They all cause a binding-related action to be performed.</p>
+<p>The <tt>fb:context</tt> element changes the
+<a class="external" href="http://jakarta.apache.org/commons/jxpath/apidocs/org/apache/commons/jxpath/JXPathContext.html">JXPath
+context</a> to the specified path. The path expressions on the binding elements
+occuring inside the context element will then be evaluated in this context, thus
+relative to the path specified on the fb:context element.</p>
+<p>The <tt>fb:value</tt> element is used to bind the value of a widget.</p>
+<p>The binding framework can do much more than what is shown in the simple
+example above, so read on for more meat.</p>
+</div>
+<a name="N10041"></a><a name="Quick+reference+of+supported+binding+elements"></a>
+<h2 class="h3">Quick reference of supported binding elements</h2>
+<div class="section">
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+
+<tbody>
+
+<tr>
+
+<th>
+
+<p>Element</p>
+
+</th>
+<th>
+
+<p>Description</p>
+
+</th>
+<th>
+
+<p>Attributes</p>
+
+</th>
+<th>
+
+<p>child elements</p>
+
+</th>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:*</p>
+
+</td>
+<td>
+
+<p>common settings for all bindings</p>
+
+</td>
+<td>
+
+<p>direction</p>
+
+</td>
+<td>
+
+<p>not applicable, see specific elements</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:context</p>
+
+</td>
+<td>
+
+<p>changes the JXPath context</p>
+
+</td>
+<td>
+
+<p>path</p>
+
+</td>
+<td>
+
+<p>any</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:value</p>
+
+</td>
+<td>
+
+<p>binds the value of widgets</p>
+
+</td>
+<td>
+
+<p>id, path</p>
+
+</td>
+<td>
+
+<p>fb:on-update, fd:convertor</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:aggregate</p>
+
+</td>
+<td>
+
+<p>binds aggregatefield widgets</p>
+
+</td>
+<td>
+
+<p>id, path</p>
+
+</td>
+<td>
+
+<p>fb:value</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:repeater</p>
+
+</td>
+<td>
+
+<p>binds repeater widgets</p>
+
+</td>
+<td>
+
+<p>id, parent-path, row-path, unique-row-id (deprecated), unique-path
+(deprecated)</p>
+
+</td>
+<td>
+
+<p>fd:convertor (deprecated), fb:on-bind, fb:on-delete-row, fb:on-insert-row,
+fb:unique-row</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:unique-row</p>
+
+</td>
+<td>
+
+<p>specifies unique fields for a repeater row</p>
+
+</td>
+<td>
+
+<p>none</p>
+
+</td>
+<td>
+
+<p>fb:unique-field</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:unique-field</p>
+
+</td>
+<td>
+
+<p>specifies unique field for a repeater row</p>
+
+</td>
+<td>
+
+<p>id, path</p>
+
+</td>
+<td>
+
+<p>fd:convertor</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:set-attribute</p>
+
+</td>
+<td>
+
+<p>sets an attribute to a fixed value</p>
+
+</td>
+<td>
+
+<p>name, value</p>
+
+</td>
+<td>
+
+<p>none</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:delete-node</p>
+
+</td>
+<td>
+
+<p>deletes the current context node</p>
+
+</td>
+<td>
+
+<p>none</p>
+
+</td>
+<td>
+
+<p>none</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:insert-node</p>
+
+</td>
+<td>
+
+<p>insert a node in an XML document</p>
+
+</td>
+<td>
+
+<p>src, xpath</p>
+
+</td>
+<td>
+
+<p>piece of XML that should be inserted</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:insert-bean</p>
+
+</td>
+<td>
+
+<p>inserts an object in a list-type bean property</p>
+
+</td>
+<td>
+
+<p>addmethod, classname (optional)</p>
+
+</td>
+<td>
+
+<p>none</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:simple-repeater</p>
+
+</td>
+<td>
+
+<p>binds repeater widgets</p>
+
+</td>
+<td>
+
+<p>id, parent-path,row-path, clear-before-load, delete-parent-if-empty</p>
+
+</td>
+<td>
+
+<p>any</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:javascript</p>
+
+</td>
+<td>
+
+<p>write binding logic in Javascript</p>
+
+</td>
+<td>
+
+<p>id, path</p>
+
+</td>
+<td>
+
+<p>fb:load-form, fb:save-form</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>fb:custom</p>
+
+</td>
+<td>
+
+<p>write binding logic in Java</p>
+
+</td>
+<td>
+
+<p>id, path, class, builderclass,factorymethod</p>
+
+</td>
+<td>
+
+<p>fb:config</p>
+
+</td>
+
+</tr>
+
+</tbody>
+
+</table>
+</div>
+<a name="N101DF"></a><a name="Detailed+reference+of+binding+elements"></a>
+<h2 class="h3">Detailed reference of binding elements</h2>
+<div class="section">
+<a name="N101E3"></a><a name="fb%3A*%2F%40direction"></a>
+<h3 class="h4">fb:*/@direction</h3>
+<p>All Bindings share the ability to have the two distinct actions they provide
+(i.e. load and save) been enabled or disabled by setting the attribute direction
+to one of the following values:</p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+
+<tbody>
+
+<tr>
+
+<th>
+
+<p>value</p>
+
+</th>
+<th>
+
+<p>load active?</p>
+
+</th>
+<th>
+
+<p>save active?</p>
+
+</th>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>both(default)</p>
+
+</td>
+<td>
+
+<p>yes</p>
+
+</td>
+<td>
+
+<p>yes</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>load</p>
+
+</td>
+<td>
+
+<p>yes</p>
+
+</td>
+<td>
+
+<p>no</p>
+
+</td>
+
+</tr>
+
+<tr>
+
+<td>
+
+<p>save</p>
+
+</td>
+<td>
+
+<p>no</p>
+
+</td>
+<td>
+
+<p>yes</p>
+
+</td>
+
+</tr>
+
+</tbody>
+
+</table>
+<p>The default value 'both' for this attribute makes its use optional.</p>
+<p>
+<strong>NOTE</strong>: this setting replaces the @readonly attribute that was
+available only on selected bindings.</p>
+<a name="N10248"></a><a name="fb%3Acontext"></a>
+<h3 class="h4">fb:context</h3>
+<p>Attributes:</p>
+<ul>
+
+<li>path</li>
+
+<li>direction (optional)</li>
+
+</ul>
+<p>Child elements: any</p>
+<p>The <tt>fb:context</tt> element changes the JXPath context to the specified
+path. The path expressions on the binding elements occuring inside the context
+element will then be evaluated in this context, thus relative to the path
+specified on the <tt>fb:context</tt> element.</p>
+<p>The <tt>fb:context</tt> element is usually used in two occasions. First of
+all, it is used as the root element of the binding file; because an XML file
+must always have one root element, and you will usually want to perform more
+than one binding action.</p>
+<p>Secondly, you use <tt>fb:context</tt> if you need to address multiple items
+having a common base path. On the one hand, this saves you on typing and helps
+readability, and on the other hand, this improves the performance of the
+binding. To illustrate this with an example, instead of doing this:</p>
+<pre>...
+&lt;fb:value id="firstname" path="info/person/firstName"/&gt;
+&lt;fb:value id="lastname" path="info/person/lastName"/&gt;
+...</pre>
+<p>it is better to do this:</p>
+<pre>...
+&lt;fb:context path="info/person"&gt;
+  &lt;fb:value id="firstname" path="firstName"/&gt;
+  &lt;fb:value id="lastname" path="lastName"/&gt;
+&lt;/fb:context&gt;
+...</pre>
+<a name="N10270"></a><a name="fb%3Avalue"></a>
+<h3 class="h4">fb:value</h3>
+<p>Attributes:</p>
+<ul>
+
+<li>id</li>
+
+<li>path</li>
+
+<li>direction (optional)</li>
+
+</ul>
+<p>Child elements:</p>
+<ul>
+
+<li>fb:on-update (optional)</li>
+
+<li>fd:convertor (note the fd: namespace!) (optional)</li>
+
+</ul>
+<p>This binding element is used to bind the value of a widget.</p>
+<p>The <tt>fb:on-update</tt> element (which itself has no attributes), can
+contain one or more binding elements that will be executed if the value of the
+widget has changed, and thus if the object has been updated. For example, you
+could use the <tt>fb:set-attribute</tt> binding to set the value of an attribute
+<tt>changed</tt> to <tt>true</tt>.</p>
+<p>The <tt>fd:convertor</tt> element has the same purpose as the
+<tt>fd:convertor</tt> element in the form definition: it converts between
+objects (numbers, dates) and strings. This is mostly used when binding to XML
+documents. Suppose you have defined a certain widget in a form definition to
+have a "date" datatype, and you want to bind to an XML document which contains
+the date in the XML Schema date representation, then you could define a
+convertor as follows:</p>
+<pre>&lt;fb:value id="birthday" path="person/birthday"&gt;
+  &lt;fd:convertor datatype="date" type="formatting"&gt;
+    &lt;fd:patterns&gt;
+      &lt;fd:pattern&gt;yyyy-MM-dd&lt;/fd:pattern&gt;
+    &lt;/fd:patterns&gt;
+  &lt;/fd:convertor&gt;
+&lt;/fb:value&gt;</pre>
+<p>The datatype attribute on the <tt>fd:convertor</tt> element, which you don't
+have to specify in the form definition, identifies the datatype to which the
+convertor belongs.</p>
+<a name="N102AA"></a><a name="fb%3Aaggregate"></a>
+<h3 class="h4">fb:aggregate</h3>
+<p>Attributes:</p>
+<ul>
+
+<li>id</li>
+
+<li>path</li>
+
+<li>direction</li>
+
+</ul>
+<p>Child elements:</p>
+<ul>
+
+<li>fb:value elements</li>
+
+</ul>
+<p>The <tt>fb:aggregate</tt> element is used to bind aggregatefields. Remember
+that aggregatefields are a special type of widget that groups multiple field
+widgets and lets the user edit their values in one textbox, splitting the values
+out to the different widgets on submit based on a regexp.</p>
+<p>The <tt>fb:aggregate</tt> binding allows to bind the values of the individual
+field widgets out of which an aggregatefield widget consists. The bindings for
+these field widgets are specified by the fb:value child elements.</p>
+<a name="N102CC"></a><a name="fb%3Arepeater"></a>
+<h3 class="h4">fb:repeater</h3>
+<p>Attributes:</p>
+<ul>
+
+<li>id</li>
+
+<li>parent-path</li>
+
+<li>row-path</li>
+
+<li>unique-row-id (deprecated)</li>
+
+<li>unique-path (deprecated)</li>
+
+<li>row-path-insert (optional)</li>
+
+<li>direction (optional)</li>
+
+</ul>
+<p>Child elements:</p>
+<ul>
+
+<li>fb:identity</li>
+
+<li>fd:convertor (deprecated)</li>
+
+<li>fb:on-bind</li>
+
+<li>fb:on-delete-row</li>
+
+<li>fb:on-insert-row</li>
+
+</ul>
+<p>
+<strong>NOTE:</strong> The attributes <tt>unique-row-id</tt> and
+<tt>unique-path</tt> and the child element <tt>fd:convertor</tt> are deprecated
+in favor of &lt;fb:unique-row&gt;.</p>
+<p>The <tt>fb:repeater</tt> binding binds repeaters based on the concept that
+each row in the repeater is identified by one or more widgets uniquely. This
+unique identification is necessary to know which rows in the repeater correspond
+to which objects in the target collection. Newly added rows in the repeater can
+(but should not) have a null value for this identification widget(s). Typically
+this/these widget(s) will not editable, so in most cases it will be an output
+widget. If you don't need the identification widget(s) at the client you don't
+need to add them to the template at all! You only have to specify
+<tt>direction="load"</tt> to this/these widget(s) then. This prevents the
+database IDs from getting to the client.</p>
+<p>The <tt>id</tt> attribute should contain the id of the repeater.</p>
+<p>The <tt>unique-row-id</tt> attribute specifies the id of the widget appearing
+on each repeater row that contains the unique identification for that row. The
+unique-path attribute contains the corresponding path in the object model.</p>
+<p>
+<strong>NOTE</strong>: Both attributes are deprecated. Please use
+<tt>&lt;fb:identity&gt;</tt> instead.</p>
+<p>The <tt>parent-path</tt> and <tt>row-path</tt> attributes can best be
+understood when described differently for XML documents and Javabeans.</p>
+<p>For XML documents: If you have an XML structure like this:</p>
+<pre>&lt;things&gt;
+   &lt;thing ... /&gt;
+   &lt;thing ... /&gt;
+&lt;/things&gt;</pre>
+<p>then the parent-path attribute contains the path to the containing element
+("things") and the row-path attribute contains the path to the repeating element
+("thing").</p>
+<p>For beans: if your bean has a property "things" which is a Collection [or
+whathever JXPath supports as lists], then the parent-path should simply contain
+"." and the row-path "things".</p>
+<p>For both beans and XML documents there is an optional attribute
+row-path-insert which functions just like the row-path but is used for the
+nested on-insert-row binding (see below). By default the row-path-insert just
+takes the value of the row-path. By explicitely setting them different one can
+exploit one of the following use cases:</p>
+<ul>
+
+<li>(1) use xpath-predicates in the row-path (note that you can not do that on
+the row-path-insert)</li>
+
+<li>(2) save the inserted rows in a different target-node of the backend model.
+</li>
+
+</ul>
+<p>A child element <tt>fd:convertor</tt> can be used to specify the convertor to
+use in case the unique-id from the model is a String (typical for XML documents)
+and the matching widget inside the repeater has a different type.</p>
+<p>
+<strong>NOTE:</strong> This element is deprecated at that place as it is only
+used in combination with the deprecated attributes unique-row-id and
+unique-path. Please use <tt>&lt;fb:identity&gt;</tt> instead.</p>
+<p>The three remaining child elements <tt>fb:on-bind</tt>,
+<tt>fb:on-delete-row</tt>, <tt>fb:on-insert-row</tt> should contain the binding
+elements that have to be executed in case of these three events.</p>
+<p>The children of the <tt>fb:on-bind</tt> element are executed when an existing
+repeater row is updated, or after inserting a new row. The JXPath context is
+automatically changed to match the current row.</p>
+<p>The children of the <tt>fb:on-delete-row</tt> element are executed when a
+repeater row has been deleted. If you want to delete the row, then put a
+<tt>&lt;fb:delete-node/&gt;</tt> in there. Alternatively, you could also use the
+<tt>fb:set-attribute</tt> binding to set e.g. an attribute status to deleted.
+</p>
+<p>The children of the <tt>fb:on-insert-row</tt> are executed in case a new row
+has been added to the repeater. Typically this will contain a
+<tt>fb:insert-node</tt> or a <tt>fb:insert-bean</tt> binding (see the
+descriptions of these binding elements for more details).</p>
+<p>The childrens of the <tt>fb:unique-row</tt> specify the widgets appearing on
+each repeater row for the unique identification of that row. Each
+&lt;fb:unique-field&gt; child specifies one widget.</p>
+<a name="N10373"></a><a name="fb%3Aidentity"></a>
+<h3 class="h4">fb:identity</h3>
+<p>Child elements:</p>
+<ul>
+
+<li>fb:value widget-bindings that make up the identity</li>
+
+</ul>
+<p>The <tt>&lt;fb:identity&gt;</tt> is just a container for the child elements
+specifying the bindings of the identification widgets.</p>
+<p>The nested elements just describe regular value bindings that can declare
+their own convertor if needed.</p>
+<p>
+<strong>NOTE:</strong> This 'identity' binding is only active in the 'load'
+operation, so specifying the direction="save" is meaningless.</p>
+<a name="N10389"></a><a name="fb%3Aset-attribute"></a>
+<h3 class="h4">fb:set-attribute</h3>
+<p>Attributes:</p>
+<ul>
+
+<li>name</li>
+
+<li>value</li>
+
+<li>direction (optional)</li>
+
+</ul>
+<p>Child elements: none</p>
+<p>Set the value of the attribute specified in the <tt>name</tt> attribute to
+the fixed string value specified in the <tt>value</tt> attribute.</p>
+<p>
+<strong>NOTE:</strong> This binding is never active in the 'load' operation,
+so there is no need to specify the <tt>direction="save"</tt> to protect you
+model from being changed during load.</p>
+<a name="N103AB"></a><a name="fb%3Adelete-node"></a>
+<h3 class="h4">fb:delete-node</h3>
+<p>Attributes:</p>
+<ul>
+
+<li>direction (optional)</li>
+
+</ul>
+<p>Child elements: none</p>
+<p>Deletes the current context node.</p>
+<p>
+<strong>NOTE:</strong> This binding is never active in the 'load' operation,
+so there is no need to specify the <tt>direction="save"</tt> to protect you
+model from being changed during load.</p>
+<a name="N103C1"></a><a name="fb%3Ainsert-node"></a>
+<h3 class="h4">fb:insert-node</h3>
+<p>Attributes:</p>
+<ul>
+
+<li>src (optional)</li>
+
+<li>xpath (optional, only in combination with src)</li>
+
+<li>direction (optional)</li>
+
+</ul>
+<p>Child elements: the piece of XML that should be inserted</p>
+<p>This binding element can only be used when the target object is an XML
+document (DOM-tree).</p>
+<p>It inserts the content of the <tt>fb:insert-node</tt> element as child of the
+current context element, or, if a src attribute is specified, retrieves the XML
+from the specified source and inserts that as child of the current context
+element. In this last case, you can also supply an xpath attribute to select a
+specific element from the retrieved source.</p>
+<p>
+<strong>NOTE:</strong> This binding is never active in the 'load' operation,
+so there is no need to specify the <tt>direction="save"</tt> to protect you
+model from being changed during load.</p>
+<a name="N103E2"></a><a name="fb%3Ainsert-bean"></a>
+<h3 class="h4">fb:insert-bean</h3>
+<p>Attributes:</p>
+<ul>
+
+<li>addmethod</li>
+
+<li>classname (optional)</li>
+
+<li>direction (optional)</li>
+
+</ul>
+<p>This binding element can only be used when the target object is a Javabean.
+</p>
+<p>If classname is specified it instantiates a new object of the type specified
+in the classname attribute and calls the method specified in the addmethod
+attribute on the current context object with the newly instantiated object as
+argument. If classname is not specified it will just call the addmethod (e.g. if
+the addmethod creates the new instance itself).</p>
+<p>
+<strong>NOTE:</strong> This binding is never active in the 'load' operation,
+so there is no need to specify the <tt>direction="save"</tt> to protect you
+model from being changed during load.</p>
+<a name="N103FE"></a><a name="fb%3Asimple-repeater"></a>
+<h3 class="h4">fb:simple-repeater</h3>
+<p>Attributes:</p>
+<ul>
+
+<li>id</li>
+
+<li>parent-path (same as in fb:repeater)</li>
+
+<li>row-path (same as in fb:repeater)</li>
+
+<li>clear-before-load (default true)</li>
+
+<li>delete-parent-if-empty (default false)</li>
+
+<li>direction (optional)</li>
+
+</ul>
+<p>Child elements: any</p>
+<p>A simple repeater binding that will replace (i.e. delete then re-add all) its
+content.</p>
+<p>Works with XML or with JavaBeans if a JXPath factory is set on the binding
+context.</p>
+<a name="N1041E"></a><a name="fb%3Ajavascript"></a>
+<h3 class="h4">fb:javascript</h3>
+<p>Attributes:</p>
+<ul>
+
+<li>id</li>
+
+<li>path</li>
+
+<li>direction (optional)</li>
+
+</ul>
+<p>Child elements:</p>
+<ul>
+
+<li>fb:load-form</li>
+
+<li>fb:save-form</li>
+
+</ul>
+<p>Specifies the binding using two JavaScript snippets, respectively for loading
+and saving the form.</p>
+<p>Example:</p>
+<pre>&lt;fb:javascript id="foo" path="@foo"&gt;
+  &lt;fb:load-form&gt;
+    var appValue = jxpathPointer.getValue();
+    var formValue = doLoadConversion(appValue);
+    widget.setValue(formValue);
+  &lt;/fb:load-form&gt;
+  &lt;fb:save-form&gt;
+    var formValue = widget.getValue();
+    var appValue = doSaveConversion(formValue);
+    jxpathPointer.setValue(appValue);
+  &lt;/fb:save-form&gt;
+&lt;/fb:javascript&gt;</pre>
+<p>This example is rather trivial and could be replaced by a simple
+<tt>&lt;fb:value&gt;</tt>, but it shows the available variables in the script:
+</p>
+<ul>
+
+<li>
+<tt>widget:</tt> the widget identified by the <tt>id</tt> attribute,</li>
+
+<li>
+<tt>jxpathPointer:</tt> the JXPath pointer corresponding to the
+<tt>path</tt> attribute,</li>
+
+<li>
+<tt>jxpathContext</tt> (not shown): the JXPath context corresponding to the
+<tt>path</tt> attribute</li>
+
+</ul>
+<p>It's much more interesting to fill a selection list via
+<tt>fb:javascript</tt> as there is no built-in element for it at the moment.
+Imagine your binding bean contains a collection field:</p>
+<pre>&lt;fb:javascript id="selectionListWidget" path="objectCollection" direction="load"&gt;
+  &lt;fb:load-form&gt;
+    var collection = jxpathPointer.getNode();
+    widget.setSelectionList(collection, "id", "name")
+  &lt;/fb:load-form&gt;
+&lt;/fb:javascript&gt;</pre>
+<p>
+<strong>NOTE:</strong>
+</p>
+<ul>
+
+<li>The <tt>&lt;fb:save-form&gt;</tt> snippet should be ommitted if the
+<tt>direction</tt> attribute is set to load.</li>
+
+<li>The <tt>&lt;fb:load-form&gt;</tt> snippet should be ommitted if the
+<tt>direction</tt> attribute is set to save.</li>
+
+<li>The <tt>@readonly</tt> attribute supported in early versions of this binding
+has been replaced by the @direction attribute as supported now on all binding
+elements.</li>
+
+</ul>
+<a name="N10482"></a><a name="fb%3Acustom"></a>
+<h3 class="h4">fb:custom</h3>
+<p>Attributes:</p>
+<ul>
+
+<li>id (optional, if not provided the containing widget-context will be passed)
+</li>
+
+<li>path (optional, if not provided "." is assumed)</li>
+
+<li>direction (optional)</li>
+
+<li>class (optional, if not present @builderclass and @factorymethod should be)
+</li>
+
+<li>builderclass (optional)</li>
+
+<li>factorymethod (optional)</li>
+
+</ul>
+<p>Child elements:</p>
+<ul>
+
+<li>fb:config</li>
+
+</ul>
+<p>Allows to specify your own user-defined binding to be written in Java. There
+are two essential modes of operation reflected in two examples:</p>
+<p>Example 1 - No configuration required:</p>
+<pre>&lt;fb:custom id="custom" path="custom-value"
+      class="org.apache.cocoon.forms.samples.bindings.CustomValueWrapBinding"/&gt;</pre>
+<p>This describes the classname of your user defined binding class.</p>
+<p>Above imposes the following requirements:</p>
+<ol>
+
+<li>there is a <tt>class</tt> CustomValueWrapBinding available in the specified
+package</li>
+
+<li>it has a default (i.e. no arguments) constructor</li>
+
+<li>it is a subclass of org.apache.cocoon.forms.binding.AbstractCustomBinding
+</li>
+
+</ol>
+<p>This last will impose the implementation of two methods:</p>
+<ul>
+
+<li>void doLoad(Widget widget, JXPathContext context) throws BindingException;
+</li>
+
+<li>void doSave(Widget widget, JXPathContext context) throws BindingException;
+</li>
+
+</ul>
+<p>where the available arguments are</p>
+<ul>
+
+<li>
+<tt>widget</tt>: the widget identified by the <tt>id</tt> attribute,</li>
+
+<li>
+<tt>context</tt>: the JXPath context corresponding to the <tt>path</tt>
+attribute</li>
+
+</ul>
+<p>Example 2 - with nested configuration:</p>
+<pre>  &lt;fb:custom id="config" path="config-value"
+      builderclass="org.apache.cocoon.forms.samples.bindings.CustomValueWrapBinding"
+      factorymethod="createBinding" &gt;
+      &lt;fb:config prefixchar="[" suffixchar="]" /&gt;
+  &lt;/fb:custom&gt;</pre>
+<p>The additional requirements to your user defined classes are now:</p>
+<ol>
+
+<li>there is a <tt>builderclass</tt> CustomValueWrapBinding class having a
+static <tt>factorymethod</tt>
+</li>
+
+<li>that can (optionally) take an org.w3c.dom.Element holding it's configuration
+</li>
+
+<li>and return an instance of your own user-defined binding which must be a non
+abstract subclass of org.apache.cocoon.forms.binding.AbstractCustomBinding</li>
+
+</ol>
+<div class="daisy-edit-link">
+<p>
+<em>Errors and Improvements?</em>
+                 If you see any errors or potential improvements in this document
+                 please help us:
+                <a class="external" href="http://cocoon.zones.apache.org/daisy/legacydocs/488">
+                  View, Edit or comment on
+                </a> the latest development version (registration required).
+              </p>
+</div>
+</div>
+</div>
+<!--+
+    |end content
+    +-->
+<div class="clearboth">&nbsp;</div>
+</div>
+<div id="footer">
+<!--+
+    |start bottomstrip
+    +-->
+<div class="lastmodified">
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<div class="copyright">
+        Copyright &copy;
+         1999-2005 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
+</div>
+<div id="feedback">
+    Send feedback about the website to:
+  <a id="feedbackto" href="mailto:dev@cocoon.apache.org?subject=[WEBSITE]%C2%A02.1/userdocs/binding.html">dev@cocoon.apache.org</a>
+</div>
+<!--+
+    |end bottomstrip
+    +-->
+</div>
+</body>
+</html>

Propchange: cocoon/site/site/2.1/userdocs/binding.html
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message