With XForms 1.0, it is not possible to differenciate between a submission error due to an invalid form (or with required-but-empty values) and a submission error due to, for example, a network issue, an HTTP 404 error response, etc.
We will talk more about this support in the future, but already a new event,
xforms-submit-serialize allows you to determine at a high-level why a submission has failed. This event is fired just after the instance has passed validation and just before the instance data is serialized.
If you set a control flag upon receiving this event, you can determine, upon receiving an
xforms-submit-error event, whether the instance has already passed validation or not. If it has not, the error is a validation error. If it has, then the error has occurred during serialization, actual submission, or as a result of processing the response. Here is how you set the status flag in an instance called
<xforms:instance id="submission-status"> <submission-status xmlns=""/> </xforms:instance> <xforms:submission ...> <xforms:setvalue ev:event="xforms-submit-serialize" ref="instance('submission-status')">validated</xforms:setvalue> </xforms:submission>
Now when a submission error occurs, you want to be able to display an appropriate message, here stored in an instance called
message. You can do this using the XForms 1.1 conditional action feature by providing the
if attribute on the
<xforms:action ev:event="xforms-submit-error"> <xforms:setvalue if="not(instance('submission-status') = 'validated')" ref="instance('message')">Please check for errors in your form.</xforms:setvalue> <xforms:setvalue if="instance('submission-status') = 'validated'" ref="instance('message')">Please contact your system administrator.</xforms:setvalue> <xforms:setvalue ref="instance('submission-status')"/> </xforms:action>
Note that XForms 1.1 is still a working draft and its content may change until it is an actual recommendation.