Orbeon Forms 3.9

About Orbeon Forms 3.9

Orbeon Forms 3.9 features over 300 improvements since Orbeon Forms 3.8.

This document describes changes made between Orbeon Forms 3.8 and Orbeon Forms 3.9.

Downloading Orbeon Forms 3.9.1 PE

Orbeon Forms 3.9.1 PE is a stable update to Orbeon Forms 3.9.0. It is available for the Professional Edition only.

Orbeon Forms 3.9.1 PE was released on February 8, 2012.

For more information, see Orbeon Forms 3.9.1 PE.

Downloading Orbeon Forms 3.9.0 CE

Orbeon Forms 3.9.0 was released on May 15, 2011.

You can download the build using this link:

Community Edition and Professional Edition

Orbeon Forms 3.9 is the second release of Orbeon Forms with two separate editions:
For more information on these two editions, please visit the FAQ.

Browser support

This release of Orbeon Forms has been tested with the following browsers:
  • Firefox 3.6 and 4 beta
  • Safari 4 and 5
  • Google Chrome 10 and 11 dev
  • Opera 11
  • Internet Explorer 8 and 9 
  • Internet Explorer 6 and 7 (not recommended)
NOTE: Form Builder requires a recent web browser, including:
  • Firefox 3.6 or greater
  • Safari 4 or greater
  • Google Chrome
  • Opera 11 or greater
  • Internet Explorer 8 or greater
  • Internet Explorer 7 (not recommended)

New features in this version

Orbeon Forms PE XPath dependency analysis engine

XPath analysis allows the XForms engine to be smarter (and faster!) about which XPath expressions to evaluate.

Whenever a user makes a change to a form, for example by entering a new value in a form field, the XForms engine must process that change, including:
  • storing the user data into an XML document (XForms instance)
  • re-evaluate validity constraints and other properties on the data
  • run recalculations
  • update the controls that bind to the data so that they reflect the latest data
Often, this results in a very large number of XPath evaluations, which can be costly.

The XPath analysis feature of Orbeon Forms PE allows the XForms engine, when loading a page, to go through XPath expressions to analyze them and understand dependencies between XML data, constraints, and controls.

This enables the XForms engine to process user interactions faster.

This feature was kindly sponsored in part by Teleflex and Lockheed.

Improved XForms upload control

Orbeon Forms features an improved upload control with the following features:
  • Background uploads that don't block or pause user interaction with a form.
  • A progress indicator which tells you where you are in large uploads.
  • A cancel button if you changed your mind.
  • And it is Flash free, which doesn't hurt!
Upload progress indicator
For more, see the documentation.

This feature was kindly sponsored by Teleflex.

Improved portal (Liferay) support

  • Form Runner Liferay proxy portlet.
    • The Form Runner Liferay proxy portlet is a lightweight option to deploy Form Runner into Liferay.
    • This is an Orbeon Forms PE feature.
    • This feature was kindly sponsored by IHS.
  • Form Runner Liferay deployment .
  • Separate portlet deployment.
    • Similar to separate deployment with servlet, separate portlet deployment allows you to generate and render XForms from your own portlet while deploying Orbeon Forms as a separate web application.
    • This feature is available in both Orbeon Forms CE and PE.
    • This feature was kindly sponsored by Abacus
NOTE: portal support has been tested with Liferay only. Support may work with other JSR-286 portlet containers, but has not been tested.

Bookshelf form deployed in Liferay

Form Runner

  • New Form-Runner-enabled DMV-14 form.
    • The DMV-14 form used to be written without the support of Form Runner. In this version, this form is fully Form Runner enabled.
  • Repeater.
    • The repeater's look is improved and includes usability improvements.
  • Localizations.
    • Norwegian and Russian have been contributed by kind users.
  • Section templates.
  • Sample data.
    • Sample data for the demo forms is loaded into the embedded eXist database out of the box.
  • Other improvements.
    • Sections expand upon saving to show current errors.
    • Support for sending user to an error page if workflow send navigation fails.
    • Confirmation prompt before deleting form data.
    • Lots of bug-fixes!

The new Orbeon Form Runner repeater

Sample data for the Bookshelf form

New landing page

Form Builder and Form Runner are now more prominent on the landing page. We don't want you to miss them! The XForms demos remain just one click away.

New landing page

New and improved XBL components

  • Dialog editor.
    • The Dialog Editor is an alternative to an inline <textarea> that uses a dialog at edition time.
  • New US State control.
  • New data-bound select.
  • Improvements to Tab View.
    • Supports dynamically hiding and disabling tabs.
    • Supports the fr-toggle event so you can programmatically switch to another tab.
    • See: Tab View
  • Add to that lots of bug fixes, including to the Datatable component.

Accessibility improvements

We implemented a series of accessibility (a11y) tweaks, mainly to address screen reader compliance, related to xforms:messageDialog SelectBox Selector, the Error Summary, and more!

XML comments in XPL and XForms

Orbeon Forms now has XML / HTML comments support in XPL and in the XForms engine.

This feature was kindly sponsored by The Stationery Office.

Other new XForms features

Other noteworthy changes in version 3.9


  • YUI vulnerability.
    • YUI, a library we use, announced a security vulnerability. This version of Orbeon Forms is patched appropriately. If you have a deployed app using Orbeon Forms, we recommend you install the YUI Flash security patch
  • XML injection.
    • We have fixed a possible injection through Ajax requests.
NOTE: For these reasons alone, we recommend upgrading from Orbeon Forms 3.8 to version 3.9.

Performance and reliability

Orbeon Forms 3.9 features a number of XForms-related performance improvements:
  • Orbeon Forms PE features a new XPath dependency analysis engine.
  • Faster XForms page state handling.
    • The state is now stored using EHcache. This is faster and consumes less memory than the Orbeon Forms 3.8 cache.
    • The state is serialized less often than before, which can lead to faster Ajax requests, especially when using large instances (or a large number of instances).
    • The state is compressed faster.
  • Better caching of XForms pages.
    • Caching is improved so that when pages are requested, more information can be retrieved from cache instead of being recomputed.
  • Improved aggregation of CSS and JavaScript resources.
    • XBL resources and user resources are also aggregated.
    • Resources are split and combined into to groups
      • baseline resources, loaded by every page and cacheable aggressively
      • other resources, loaded specifically for a given page
    • See Combined resources for more information.
  • New Ajax retry mechanism.
    • If an Ajax request from the browser takes too long or is lost because of a network problem, it will be retried. The server ensures that if the response has already been generated, then it is simply replayed back.
  • Faster XPath cache
    • The XPath expressions cache uses smaller keys, which yields to faster retrieval of precompiled XPath expressions.
  • Other performance changes.
    • The XForms processing model related to refresh and submissions has been tuned.
  • More unit tests.
    • Orbeon Forms has now over 480 automatic server-side unit tests and a growing number of client-side unit tests as well.


We keep updating the Orbeon Forms wiki with the latest documentation as we implement features. Let us know if you wish to contribute and we'll give you access!

Cool stuff for developers

In this version, part of the source code is now written in the following languages:
These languages translate to Java bytecode and JavaScript respectively, so there is no change in the software needed on the server or client.

Also, don't forget to follow us:

Compatibility notes

New upload control

This version features a new and improved upload synchronization mechanism. In some cases, upload-related XForms code written for Orbeon Forms 3.8 and earlier will not work properly with Orbeon Forms 3.9. For more information, see Controlling upload between the client and the server.

Change to seconds-from-dateTime() function

In previous versions, the XForms seconds-from-dateTime() was provided. However, it shadowed the standard XPath 2.0 seconds-from-dateTime() function of the same name, which has different parameter types and semantic.

Because of this, the XForms working group at W3C has decided to remove the XForms version of seconds-from-dateTime().

If your application uses seconds-from-dateTime() with Orbeon Forms 3.8 or earlier, you can rename its uses to xxforms:seconds-from-dateTime(), or use standard XPath 2.0 functions for date and time arithmetic.


XForms state store configuration
The oxf.xforms.store.application.* properties are no longer used.

See XForms state store configuration for more details about the oxf:/config/ehcache.xml configuration file.

CSS and JavaScript resources

In this version:
  • Versioned resources are now enabled by default in Orbeon Forms PE. This means that CSS and JS resources will have a version number in the path by default, so that better browser caching is possible.
  • Combined resources URLs no longer use the
    pattern. Instead, they use an opaque hash, for example:
  • Combined/minimal resources properties oxf.xforms.minimal-resources and oxf.xforms.combine-resources now always apply globally and can no longer be overridden on a form by form basis on the <model> element.

Default app path prepended for resources

The oxf.url-rewriting.app-prefix property is now set to /apps instead of being blank.

With Orbeon Forms if you write /foo/bar as a path to a page, this is meant to reach an application called foo under the /apps resources folder. In particular, the page flow /apps/foo/page-flow.xml is retrieved.

On the other hand, before Orbeon Forms 3.9, if you wrote /foo/bar.gif, the resource was searched under /foo/bar.gif instead of /apps/foo/bar.gif.

This forced you, if you wanted to store resources together with pages, to prepend /apps to all your resources paths, but not to your page paths.

The change to the oxf.url-rewriting.app-prefix property fixes that, by adding the /apps prefix automatically if missing. For this feature to work properly, all non-platform (i.e. non-Orbeon) resources, including CSS, JavaScript, and images, should be located alongside your application under /apps/[application].

You can turn off this feature by setting the property to an empty string in your properties-local.xml:

<property as="xs:string" name="oxf.url-rewriting.app-prefix" value="/apps"/>

FCK editor and JSCalendar support removed

Legacy FCK editor and JSCalendar implementations are removed. The following properties no longer apply:
  • oxf.xforms.htmleditor
  • oxf.xforms.datepicker
Instead, the YUI Rich Text Editor (RTE) and calendar are automatically used.

Built-in open selection autocomplete mode support removed

The xxforms:autocomplete appearance on <xforms:select1 selection="open"> is no longer supported. Use the <fr:autocomplete> XBl control instead.

XML parsing: handling of external entities is disabled by default

For security reasons, external entities are now disabled and are ignored whenever an XML file is parsed.

The exception is that Page Flow page models and page view documents automatically process external entities.

You can specifically enable external entities support on the URL generator with the new external-entities property.

Migration to eXist 1.4

This version of Orbeon Forms comes with eXist 1.4. If you have an existing eXist database built with the previous version of eXist shipped with Orbeon (version 1.2), you will have to migrate the data.

Follow the eXist Upgrade Guide, including a backup and restore of the data.

Location of Form Runner data in sample eXist database

In the sample Orbeon Forms database, Form Runner used to store data directly under the collection:


In this release, the collection is changed to:


If you have data in the sample database and if you upgraded that database to eXist 1.4, you can either:
  • set this property in your properties-local.xml file:
    <property as="xs:anyURI" name="oxf.fr.persistence.service.exist.uri"
  • or move the eXist collection(s) containing your forms to the new location

Tab view

In Orbeon Forms 3.8, binding the fr:tab to a node didn't change the context for the XForms inside the fr:tab. It does change the context in Orbeon Forms 3.9, to be more consistent with XForms constructs such as xforms:group. If you need the old behavior, you can set the following property to false:

<property as="xs:boolean" name="oxf.xforms.xbl.fr.tabview.tab-changes-context" value="false"/>


  • YUI 2.8.1. We have completed the upgrade to YUI 2.8.1.
  • HttpClient 4. We upgraded HttpClient from version 3.1 to version 4.
  • Other support libraries. A number of support libraries (such as Apache Commons) have been upgraded.

Deprecated custom-processors.xml file

Instead, use:


This naming brings consistency with properties-local.xml.

Deprecated XForms samples

Some older examples have been moved to RESOURCES/apps/xforms-attic.

Deprecation and removal of Java classes

The following classes, referenced from portlet.xml, are still available but deprecated:
  • OrbeonPortlet:
    • use OrbeonPortlet2 instead.
  • OrbeonPortletDelegate:
    • use OrbeonPortlet2Delegate instead.
The following classes have been deprecated for a long time and are now removed:
  • OPSServlet and OPSServletDelegate:
    • use OrbeonServlet and OrbeonServletDelegate instead.
  • OPSPortlet and OPSPortletDelegate:
    • use OrbeonPortlet and OrbeonPortletDelegate instead.
  • OPSServletFilter and OPSServletFilterDelegate:
    • use OrbeonServletFilter and ServletFilterDelegate instead.
  • OPSXFormsFilter:
    • use OrbeonXFormsFilter instead.
  • OPSServletContextListener and OPSServletContextListenerDelegate:
    • use OrbeonServletContextListener and OrbeonServletContextListenerDelegate instead.
  • OPSSessionListener and OPSSessionListenerDelegate:
    • use OrbeonSessionListener and OrbeonSessionListenerDelegate instead.

Multiple binds on a given node

[Added 2011-10-23]

With Orbeon Forms 3.8, combination of model item properties on a given node was based on bind order. With Orbeon Forms 3.9, it is based on a boolean combination. See Multiple binds on a given node.

Complete list of issues addressed in this release