function html5handleResponse(context, data) {
if (null == context.sourceid) {
return;
}
var jsfResponse = {};
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(data, "text/xml");
jsfResponse.responseXML = xmlDoc;
jsf.ajax.response(jsfResponse, context);
}
function html5submitFunction(element, event, options) {
var source = event ? event.target : element;
source = source ? source : element;
var form = element;
while ((null != form) && ("form" != form.tagName.toLowerCase())) {
form = form.parentNode;
}
var formData = new FormData(form);
var formId = form.id;
var sourceId = element ? element.id : event.target.id;
if (options.execute) {
var executeArray = options.execute.split(' ');
if (executeArray.indexOf("@none") < 0) {
if (executeArray.indexOf("@all") < 0) {
options.execute = options.execute.replace("@this", element.id);
options.execute = options.execute.replace("@form", form.id);
if (executeArray.indexOf(element.name) < 0) {
options.execute = element.name + " " + options.execute;
}
} else {
options.execute = "@all";
}
}
} else {
options.execute = "@all";
}
if (options.render) {
var renderArray = options.render.split(' ');
if (renderArray.indexOf("@none") < 0) {
if (renderArray.indexOf("@all") < 0) {
options.render = options.render.replace("@this", element.id);
options.render = options.render.replace("@form", form.id);
} else {
options.render = "@all";
}
}
} else {
options.execute = "@all";
}
formData.append("javax.faces.source", sourceId);
formData.append(source.name, source.value);
formData.append("javax.faces.partial.execute", options.execute);
formData.append("javax.faces.partial.render", options.render);
formData.append("javax.faces.partial.ajax", "true");
if (event) {
formData.append("javax.faces.partial.event", event.type);
}
if (options) {
for (var p in options) {
if ("function" != typeof(options[p])) {
formData.append(p, options[p]);
}
}
}
var context = {
source: source,
sourceid: sourceId,
formid: formId,
element: element,
onevent: options.onevent,
onerror: options.onerror || function (param) {
alert("JSF error " + param.source + " " + param.description);
}
};
var xhr = new XMLHttpRequest();
xhr.open("POST", form.getAttribute("action"));
xhr.setRequestHeader("Faces-Request", "partial/ajax");
xhr.onreadystatechange = function () {
if ((4 == xhr.readyState) && (200 == xhr.status)) {
html5handleResponse(context, xhr.responseText);
}
};
xhr.send(formData);
}
Provided fix to Mojarra that was tested successfully in house.