Skip to content

Instantly share code, notes, and snippets.

@armand1m
Created July 20, 2016 13:16
Show Gist options
  • Save armand1m/f939e6af43a60f90bd8e60cda8558cd8 to your computer and use it in GitHub Desktop.
Save armand1m/f939e6af43a60f90bd8e60cda8558cd8 to your computer and use it in GitHub Desktop.
Fixer for updating and setting view state hidden field for multiple forms ajax requests in JSF 2.0/2.1/2.2
(function() {
jsf.ajax.addOnEvent(function(data) {
if (data.status == "success") {
var viewState = getViewState(data.responseXML);
for (var i = 0; i < document.forms.length; i++) {
var form = document.forms[i];
if (form.method == "post" && !hasViewState(form)) {
createViewState(form, viewState);
}
}
}
});
function getViewState(responseXML) {
var updates = responseXML.getElementsByTagName("update");
for (var i = 0; i < updates.length; i++) {
if (updates[i].getAttribute("id").match(/^([\w]+:)?javax\.faces\.ViewState(:[0-9]+)?$/)) {
return updates[i].textContent || updates[i].innerText;
}
}
return null;
}
function hasViewState(form) {
for (var i = 0; i < form.elements.length; i++) {
if (form.elements[i].name == "javax.faces.ViewState") {
return true;
}
}
return false;
}
function createViewState(form, viewState) {
var hidden;
try {
hidden = document.createElement("<input name='javax.faces.ViewState'>");
} catch(e) {
hidden = document.createElement("input");
hidden.setAttribute("name", "javax.faces.ViewState");
}
hidden.setAttribute("type", "hidden");
hidden.setAttribute("value", viewState);
hidden.setAttribute("autocomplete", "off");
form.appendChild(hidden);
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment