Changes in Version 3.7
1. Introduction
Welcome to Orbeon Forms 3.7 beta 1!
Orbeon Forms 3.7 features over 200 improvements since Orbeon Forms 3.6, including in the areas of performance, core XForms engine enhancements, schema validation, session handling, caching, and application server support.
This document describes changes made between Orbeon Forms 3.6 and Orbeon Forms 3.7.
NOTE: Orbeon Forms 3.7 is still UNDER DEVELOPMENT as of August 2008. The latest stable release of Orbeon Forms is 3.6.
2. Changes in Version 3.7
2.1. Noteworthy Changes
-
Noscript mode. The "noscript mode" in Orbeon Forms allows you to use a single XHTML+XForms description of a page and to target browser that have JavaScript disabled. This is now integrated into Form Runner, which means you don???t need JavaScript on the client to fill-out forms created by Form Builder. This is also the basis for the accessibility features we are working on (including WCAG AA compliance).
[TODO: how to enable, etc.]
-
Improved date and time controls. You can now type in dates, and the date picker is by default the YUI date picker. We have also added controls for
xs:time
andxs:dateTime
types. -
Access request and session directly from XForms. In the past, accessing request and session information from XForms required using the page flow controller or possibly a page model written in XPL. Now, you can use XPath functions to do so.
-
New YUI. Orbeon Forms now uses YUI 2.5.2.
-
Inline XML Schema support. XForms supports using XML Schemas which are embedded within the
<xforms:model>
element. Orbeon Forms now supports this feature. This is particularly useful when you create a new schema which is just used within an XForms document, or to define a series of simple types used for validation.<xforms:model><!-- A simple inline XML Schema --><xs:schema elementFormDefault="qualified" attributeFormDefault="unqualified"><xs:simpleType name="link"><xs:restriction base="xs:string"><xs:pattern value="(https?\://([^/?#]+)/([^?#]*)(\?([^?#]+))?(#(.*))?)?"/></xs:restriction></xs:simpleType></xs:schema><!-- More XForms model constructs below -->...</xforms:model>The XML Schema definitions are directly available to the model, in particular to binds:
<xforms:bind nodeset="my-link" type="link"/> -
Session heartbeat feature for XForms pages. Orbeon Forms now enables by default the Session Heartbeat feature. This allows sessions associated with live pages in a user's browser to stay active, therefore preventing situations where the user gets back to a form and gets session expiration errors.
See also Session Heartbeat.
This feature is kindly sponsored by Teleflex.
-
Versioned resources. Orbeon Forms now supports versioning of resources such as CSS, JavaScript, and images. This allows more aggressive client-side caching, thereby reducing page loading times as well as server load.
See Versioned Resources for the full documentation.
This feature is kindly sponsored by Teleflex.
-
Attribute Value Templates (AVTs) on XHTML elements. AVTs were already supported on some XForms elements. You can now use AVTs on XHTML elements as well. This allows you to use XForms to influence aspects of XHTML such as
class
,style
orcolspan
attributes.See AVTs on XHTML Elements for documentation.
This feature is kindly sponsored by Teleflex.
-
Variables within controls, models and actions. You can now declare variables usable from any XPath expression in an XForms document, using the
xxforms:variable
(orexforms:variable
) element. Variables are extremely useful, for example to avoid repeating long XPath expressions, or to give an XPath expression unambiguous access to data computed in enclosing<xforms:group>
or<xforms:repeat>
elements.See Variables for documentation.
-
exforms:iterate
attribute and XForms 1.1context()
function. In particular, these additions make it much easier to iterate over nodes within actions.See Iteration of XForms Actions over Sequences for documentation and a complete example.
-
ev:observer
andev:target
attributes on action handlers. The XML Eventsev:observer
attribute used to be only supported within a model to refer to a nested instance. It is now globally supported. Support for the more rarely neededev:target
attribute has been added as well. -
Modal triggers. Usually, activating a trigger on the client doesn't prevent further actions in the user interface. Sometimes, it is however useful to block such further actions until some processing is complete, for example calling a submission that saves a document.
See Modal Trigger Behavior for documentation.
This feature is kindly sponsored by Teleflex.
-
Generalized
context
attribute on XForms elements. XForms 1.1 introduces thecontext
attribute on<xforms:insert>
and<xforms:delete>
. Orbeon Forms now supports this convenient attribute on all elements changing the XPath evaluation context, including controls, actions, binds, and submissions. Further versions of XForms are likely to extend support this way.See Generalized
context
attribute for the documentation. -
Change to handling of alerts. In XForms the behavior of
xforms:alert
is not built-in. Instead, the behavior was initially planned to be controlled through CSS. Previous versions of Orbeon Forms displayed an alert icon and message (if provided) only if the value associated with the control was invalid. Orbeon Forms now by default shows the control in alert state when the value is invalid, but also when it is required but empty. -
Outputting server log messages with
xforms:message
.xforms:message
supports new level values:xxforms:log-debug
,xxforms:log-info
,xxforms:log-warn
andxxforms:log-error
. These cause the message to be logged on the server using the levels "debug", "info", "warn" and "error" as per the log4j terminology. Messages output with these levels appear in the Orbeon Forms logs depending on the configuration oflog4j.xml
. For example:<xforms:submission>...<xforms:message ev:event="xforms-submit-error" level="xxforms:log-error">A submission error occurred:<xforms:output value="event('error-type')"/></xforms:message></xforms:submission>See also Displaying Messages with the
xforms:message
Action. -
Inline transformations in XPL. Often, processor configurations must be determined dynamicaly. XSLT is typically used for that purpose, but this can lead to heavier code. Inline transformations simplify the syntax by allowing transformations directly embedded within processor inputs:
<p:processor name="oxf:url-generator"><p:input name="config" transform="oxf:xslt" href="#instance"><!-- This is an inline transformation --><config><url>http://www.example.org/</url><mode><xsl:value-of select="/instance/mode"/></mode></config></p:input><p:output name="data" id="example-document"/></p:processor>See also Embedding Transformations within Inputs.
-
Temporary files in the file serializer. The file serializer can now automatically create temporary files and write to those temporary files. It will also delete temporary files, based on a "scope" parameter you specify in the configuration. As with the Scope generator and Scope serializer, you can set the scope to either "request", "session", or "application".
-
Epilogue pipeline configurable with properties. These properties in particular allow you to pick the theme stylesheet, enable XHTML output, etc.
-
Orbeon Forms version. You can know the exact version number of the Orbeon Forms you are running by running
java -jar orbeon-cli.jar -v
from the command line. The FAQ has more on how to know which version of Orbeon Forms you are running. -
Chart Processor enhancements. The chart processor now support two new types of chart: XY charts and time series. For charts that show a lot of data points, you can also limit the number of labels shown in the categories axis with the new
max-number-of-labels
option.
2.2. Complete List of Issues Addressed in this Release
NOTE: Orbeon Forms 3.7 is still UNDER DEVELOPMENT as of August 2008. The latest stable release of Orbeon Forms is 3.6.
Orbeon Forms 3.7 addresses the following bugs and features:
- #310869: Regression: In XForms Controls example, instance inspector's "Evaluate XPath" causes JS error
- #309637: Regression: Flickr Resize example no longer sets images' style attribute with Firefox and Safari
- #310855: Regression: To-Do Lists example: add new list and get a JS exception
- #310908: Namespace not correctly in submissions with ref="instance('gaga')/foo"
- #310894: RFE: Implement minimal support for asynchronous submissions
- #308781: Check excludes in build.xml and remove obsolete source files
- #310856: xforms:group does not use xxforms:order property
- #310831: Regression: HTML area (FCKeditor) fails within a YUI dialog
- #304973: Hints are ignored with triggers
- #305672: RFE: Investigate using YUI to implement tooltips
- #306172: RFE: Improve date selector
- #306385: Calendar widget should allow the date to be removed
- #304558: Empty date field with mapped xs:date type only displays calendar icon
- #306952: RFE: Need widgets for xs:time and xs:dateTime
- #310569: RFE: xforms:input should not generate span and img for date for non-date fields
- #310826: Regression: oxf:url-generator may not recognize modes based on content-type anymore
- #310825: RFE: Make portlet theme configurable through properties
- #310778: Namespace prefix not in space for QName: xml:lang
- #310779: Prefix xbl has not been declared
- #310797: RFE: Provide XForms extension type to validate XPath 2.0 expressions
- #310795: ORBEON.xforms.Globals.requestForm has no properties
- #310764: RFE: Add ability to natively handle hierarchical properties in properties.xml
- #308408: Upgrade to YUI 2.5.2 or later
- #310675: Log4j configurations still being clobbered...
- #310674: RFE: oxf:url-generator should support forward-headers property like xforms:submission
- #308758: RFE: Support for AVT in HTML in xforms:label (i18n issue)
- #310640: RFE: Support for xforms:output within xhtml:title
- #310616: RFE: Support xforms:model outside xhtml:head, especially within xxforms:dialog
- #310611: RFE: Ability to use AVTs on XHTML elements outside HTML body
- #310550: Regression: xforms:input bound to xs:boolean stores encrypted value instead of decrypted value
- #310557: Reserved HTML characters like opening bracket and quotes don't work in trigger label
- #310544: RFE: property() function should support XForms engine properties
- #310542: RFE: xforms-server-submit URLs are ugly
- #310541: xforms:upload control does not display mediatype after a file is uploaded
- #310457: Regression: Form Builder: Clicking on a label just after page load no longer works
- #310496: RFE: Present noscript content in JavaScript-enabled mode then the client has JavaScript disabled
- #310456: Selecting a non-existing file for upload causes a JS exception with IE
- #310442: HTML area does not send value change events anymore with IE
- #310439: RFE: Configurable automatic header forwarding for xforms:submission
- #310429: xxforms:attribute element shows in resulting HTML page
- #310428: XForms server incorrectly caches its output based on its input
- #310274: select1 full (radio list) in repeat cause JS error on insert
- #309390: New PNG images for XForms don't look nice with IE 6
- #310170: Regression: static itemset shows as blank when adding a new repeat iteration
- #310383: RFE: Support for category-label-angle in charts of type time-series
- #310352: RFE: Closed selection controls must encrypt the values sent to the client
- #309369: Regression: Govt Forms example: DMV-14 form no longer shows license number upon loading
- #310034: ORBEON.xforms.Document.getValue() fails with static readonly input
- #309733: Regression: rewrite issue with XForms filter
- #309865: Regression: help icon for control not hidden or shown when relevance is changing
- #309860: Support XForms 1.1 serialization attribute and related behavior
- #306595: RFE: Support AVTs on more xforms:submission attributes
- #309736: doc-available() thowing exception instead of returning false
- #309518: xforms:toggle throw an exception if a non-existing case is provided
- #309481: RFE: Ability to limit the number labels on the X axis
- #309482: RFE: New type of chart: XY and time series
- #309475: Setting log4j.configuration property in Orbeon Forms causes other applications using log4j to fail
- #305992: Create a "minimal" version of xforms.js
- #306741: Some YUI tree widget JS files don't have min versions
- #309389: Changing the index in a repeat should do a recalculate
- #309404: RFE: Dispatch events when an instance becomes valid/invalid
- #309366: RFE: Need a built-in schema type to validate well-formed XML
- #309348: RFE: Implement way of enabling button based on instance validity
- #309341: Click on xforms:output dispaches DOMActivate but not DOMFocusIn
- #309290: RFE: Implement XForms 1.1 replace="text" for submissions
- #309265: Bug with preceding-sibling after insertion
- #309210: As per XForms 1.1, do not apply the @type MIP to instance nodes that contain child elements
- #308956: Regression: To-Do Lists example is broken
- #309165: xforms:submission throws an NPE when submissing content not located in an instance
- #309163: Implement support for event('response-headers') as per XForms 1.1
- #309164: Implement event('response-status-code') on xforms-submit-done as per XForms 1.1
- #309162: RFE: Optimization for IE, to avoid registering events for focus and blur on every form control
- #308915: Occasional dom4j serialization error when restoring static state
- #309090: RFE: Support xxforms:xinclude on xforms:submission
- #309003: RFE: Custom event attributes should use xxforms prefix
- #309021: NPE upon deleting row containing xforms-valid event handler
- #306367: Text missing in PDF Documentation
- #304697: Source Code Viewer: issue downloading .txt, .java, and .xsd
- #308995: RFE: Support relevance in itemsets
- #308994: RFE: Upgrade commons-fileupload to version 1.2.1
- #308993: RFE: Support item-value property in xforms-selected event
- #308825: RFE: Set media="all" on external CSS stylesheet
- #308936: exf:sort(): namespaces not supported in second argument
- #308954: RFE: Documentation on how to setup a data source on JBoss
- #308952: Regression: ClassCastException: org.orbeon.oxf.xforms.control.controls.XFormsInputControl
- #306602: Implement URL rewriting in Ajax responses
- #308380: xforms:trigger/xforms:output don't rewrite URLs in the same way
- #308953: Non-fatal FileNotFound exceptions on JBoss
- #308944: RFE: Allow inline transformations within processor inputs
- #308946: RFE: Binary and text formats must support embedded last-modified to facilitate serialization
- #308945: oxf:to-xml-converter must support validation and XInclude configuration
- #306168: Issue with ancestor-or-self:: axis when using XSLT view
- #308937: Date picker for input field of type date is shown
- #308921: RFE: xxforms:bind() function to access a bind nodeset within another expression
- #308897: RFE: XPath functions to access request and session attributes directly from XForms
- #308896: Support xforms-select and xforms-deselect on selection controls upon user interaction
- #308893: RFE: Support AVTs on xxforms:show and xxforms:hide attributes
- #308895: RFE: Support AVTs on all attributes of xforms:dispatch
- #308894: RFE: Support AVTs on all attributes of xxforms:load
- #308846: PFC must not serve files if HTTP method is not GET
- #308864: RFE: Support xforms:output[@mediatype = 'image/*'] and xs:base64Binary datatype
- #308878: Document xforms-model-construct-done vs. xforms-ready
- #308618: RFE: XPath functions to access request parameters directly from XForms
- #308877: RFE: Allow oxf:url-generator to always produce output in binary mode
- #308863: RFE: Support xforms:output[@mediatype = 'image/*'] and xs:anyURI datatype
- #308850: xforms:upload initiallly containing data does not display properly
- #308846: PFC must not serve files if HTTP method is not GET
- #307714: Submission with @ref does not always validate properly
- #308844: Click on newly added control after dialog was displayed causes JS error on IE
- #303986: XML Schema validation: xsi:type not supported in XForms instances
- #308833: RFE: Submission to allow PUT and POST of binary content
- #308832: xforms:load misbehaves when the resource resolves to an anchor
- #308817: RFE: Support passing context information to custom events
- #308803: RFE: xforms:alert message should be displayed if the value is required but empty
- #308683: Regression: XPath expressions with local variable (for $i in ...) sometimes do not return correct results
- #308780: RFE: Support XML Events extension to allows for lists of event names, observers, and targets
- #308771: RFE: Dispatch xforms-deselect on xforms:upload when user clears file in the UI
- #308770: RFE: Performance: page can't be used until all the images and CSS are loaded
- #308710: RFE: Click on iteration should send DOMFocusIn
- #308768: Support inline XML Schema within xforms:model
- #308261: NPE after deploying war file in Liferay
- #308759: RFE: Support more than one observer per event handler
- #308672: RFE: Implement exforms:variable and xxforms:variable in actions
- #308747: CSS: Too much space taken by alert on all browsers except Firefox 2
- #308621: Rename ops.log to orbeon.log in config/log4j.xml
- #308227: RFE: Support versioned resources to improve caching
- #308087: RFE: Implement session heartbeat feature to keep open pages alive
- #305753: Document xxforms:script's support for this and event
- #306666: Add documentation for dialog actions and events
- #308708: RFE: Upgrade to eXist 1.2
- #308462: Tooltips on mouse over only show only show the second and subsequent times the mouse goes over the icon or control
- #308694: xxforms:show/@neighbor doesn't work
- #308695: xxforms:show/@neighbor doesn't work correctly when the neighbor is within a repeat
- #306407: Needs ability to show dialog when page loads
- #308039: Upgrade setvalue and related to the XForms 1.1 semantics
- #308447: Dialogs are no longer draggable
- #308674: RFE: Implement exforms:variable and xxforms:variable in models
- #305571: RFE: Implement exforms:variable and xxforms:variable in controls
- #306972: RFE: Generalized support for @context attribute on controls, actions and bindings
- #308660: RFE: Extension functions to create elements and attributes by name (xxforms:element() and xxforms:attribute())
- #307876: xforms:group without nested xforms:label element may generate xhtml:label element in output
- #303954: XML Events: support ev:observer and ev:target attributes
- #308634: RFE: Support DOMActivate on xforms:output
- #308608: RFE: New modal trigger
- #308569: RFE: Use indentation for XForms event and action logging
- #308544: Default log file is orbeon.log instead of ops.log
- #308545: Can't deploy Orbeon Forms in Liferay 4.3.3 because of descriptors incompatibility
- #308546: RFE: Reorganize WEB-INF descriptors
- #308527: RFE: Add more context information to DOM* events
- #308525: RFE: Implement XForms 1.1 context() function
- #308526: RFE: Implement eXorms @exforms:iterate attribute on actions
- #308524: XForms schema: allow "style" attribute on xforms:output
- #308494: Handle reference to nested xforms:bind from xforms:repeat as per XForms 1.1
- #308486: RFE: xforms:toggle/@case should support AVTs
- #308391: RFE: Support xforms-help event
- #308461: RFE: Help displayed as a tooltip
- #308419: JavaScript error in IE when clicking around in the tab with the slider in the XForms controls example
- #308446: RFE: Action to output log messages
- #308444: Integrate patch for error-type context information on xforms-submit-error
- #308443: URL generator's <url> element shouldn't be forced to appear first in the configuration
- #308410: When the session expires on IE, a JavaScript exception occurs
- #308406: oxf:scope-generator produces incorrect null document
- #308404: Increase default session duration
- #308403: Document oxf:sql processor's sql:param/@null attribute
- #308392: RFE: XForms upload control: show unit next to file size
- #308390: RFE: Show tooltip with text "Delete file" for the "x" image displayed for the upload control
- #308389: oxf:xml-converter does not output correct SAX events for namespace declarations
- #308387: Also display summary error message in error page
- #307705: Upgrade to YUI 2.3.1
- #308347: Cache-Control header with must-revalidate="true" causes IE to lose form values
- #308308: RFE: Implement of setfocus action: always select first checked radio button or check box, if any
- #308335: Exception when xforms:item is within unbound xforms:select1 control
- #308325: Error "The processor output must be connected" when "data" output is not connected
- #308323: Avoid repeated use of form.elements.length when iterating over elements
- #308292: RFE: Support p:property() XPath function accessible from XPL
- #308291: RFE: Support xxforms:property() XPath function accessible from XForms
- #308287: Separate deployment: conditional get produces <null> XML document in the browser
- #308277: Span with class xforms-loading-none is taking some space on top of the form with IE
- #308266: Exception when deploying on JBoss 4.2
- #308240: xforms:setfocus has no effect on xforms:select1[@appearance = 'full']
- #308223: RFE: XForms extension action to remove all shared instances from the cache
- #308218: RFE: Support -v option to just display the Orbeon Forms version from the command line
- #308217: xxforms:refresh-items="false" is broken
- #308215: Potential deadlock on XFormsServerSharedInstancesCache
- #308192: Pre-Check and Post-Check headers in epilogue are likely useless
- #308204: oxf:xforms-submission does not work with xxforms:shared="application" attribute
- #308193: RFE: Option to reload XForms page on back/forward
- #307813: Can get a "state not found error" when clicking while HTML submission is in progress and then doing a browser back
- #307867: Activating an HTML link containing an xforms:output may cause later browser back to fail
- #307874: Orbeon Forms example apps have many issues with Firefox 3.0b1 and 3.0b2
- #308086: RFE: Improve XForms properties to be configurable in properties.xml and overridable in individual pages
- #308080: Upgrade embedded eXist to post-1.1.1 version
- #308078: Getting "Unable to retrieve XForms engine state" error when combining submission and xxforms:script
- #308023: HTTP session is not available when submitting upon xforms-ready in separate deployment mode
- #308051: Provide a way to disable hint shown as a tooltip
- #308050: Support XForms 1.1 serialization="none" instead of serialize="false" on xforms:submission
- #308049: Support models without instances
- #308040: Allow displaying inline HTML hints with CSS
- #307776: RFE: When session expires on Ajax requests, display different error dialog title
3. Compatibility Notes
3.1. Legacy Classic XForms Engine
The legacy Classic XForms engine has been deprecated for several releases now, and should not be expected to work in Orbeon 3.7.
This is particularly appropriate now that the XForms engine support the noscript mode, an accessible, JavaScript-free rendering mode.
3.2. Binds Evaluation
With Orbeon Forms 3.6 and earlier, <xforms:bind>
node-sets were re-evaluated
everytime an XForms recalculation or revalidation was performed. In this version, this is no longer
the case: <xforms:bind>
node-sets are re-evaluated during the XForms rebuild
operation only, as per the XForms specification. This is meant to improve performance, but it also
has a side-effect: in certain circumstances, an explicit <xforms:rebuild>
action may
be necessary.
3.3. Image Triggers
Orbeon Forms 3.6 and earlier allowed using images within xforms:trigger
and
xforms:submit
using a special appearance, xxforms:image
, and a nested element,
xxforms:img
. This has long been deprecated and is now no longer supported. Use instead the
minimal
appearance. For example, replace the following:
with:
Notice how the image is now in the XHTML namespace, and placed within the label of the trigger.
3.4. Default HTML DOCTYPE
The default HTML DOCTYPE produced by the epilogue has changed from -//W3C//DTD HTML 4.01
Transitional//EN
(HTML 4.01 transitional) to -//W3C//DTD HTML 4.01//EN
(HTML
4.01 strict). This may have an impact on how your web browser interpets CSS rules.
3.5. Date Picker Using YUI Widget
Input fields bound to node of type xs:date
are now using the YUI date picker widget
instead of the jscalendar widget. If your code depends on the jscalendar (or you prefer the
jscalendar for whatever reason), you can instruct Orbeon Forms to use the jscalendar by setting the
oxf.xforms.datepicker
property to jscalendar
.
Note that there is a chance that the jscalendar widget might be deprecated in the future, so you should try to use or switch to the YUI when possible.