3 回答

TA贡献1797条经验 获得超6个赞
javax.faces.ViewState
jsf.ajax.addOnEvent(function(data) { if (data.status == "success") { fixViewState(data.responseXML); }});function fixViewState(responseXML) { var viewState = getViewState(responseXML); if (viewState) { for (var i = 0; i < document.forms.length; i++) { var form = document.forms[i]; if (form.method == "post") { if (!hasViewState(form)) { createViewState(form, viewState); } } else { // PrimeFaces also adds them to GET forms! removeViewState(form); } } }}function getViewState(responseXML) { var updates = responseXML.getElementsByTagName("update"); for (var i = 0; i < updates.length; i++) { var update = updates[i]; if (update.getAttribute("id").match(/^([\w]+:)?javax\.faces\.ViewState(:[0-9]+)?$/)) { return update.textContent || update.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'>"); // IE6-8. } 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);}function removeViewState(form) { for (var i = 0; i < form.elements.length; i++) { var element = form.elements[i]; if (element.name == "javax.faces.ViewState") { element.parentNode.removeChild(element); } }}
<h:outputScript name="some.js" target="head">
<h:body>
<f:ajax>
jsf.js
if (typeof jsf !== 'undefined')
jsf.ajax.addOnEvent()
<h:outputScript library="javax.faces" name="jsf.js" target="head" />
jsf.ajax.addOnEvent
<f:ajax>
<p:ajax>
<p:commandXxx>
$(document).ajaxComplete(function(event, xhr, options) { if (typeof xhr.responseXML != 'undefined') { // It's undefined when plain $.ajax(), $.get(), etc is used instead of PrimeFaces ajax. fixViewState(xhr.responseXML); }}
更新<h:body>
<h:body> <h:outputScript library="omnifaces" name="fixviewstate.js" target="head" /> ...</h:body>

TA贡献1878条经验 获得超4个赞
关于使用js代码,你能更具体一点吗?我在richFaces 4.5.13中使用了一个简单的脚本标记,它在命令按钮(“h:”或“a4j:”)上的结果是相同的(必须单击两次);您也没有提到jQuery/richFaces版本。
添加回答
举报