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);
}
function html5handleResponse(context, data) { if (null == context.sourceid) { //was not a jsf upload 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 = element.name + " " + element.id; //ICEfaces default render @all 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 { //ICEfaces default execute @all 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, //'begin' event is not triggered since we do not invoke jsf.ajax.request -- onBeforeSubmit relies on this event 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); }