gpt4 book ai didi

ajax - 错误页面上的错误报告表

转载 作者:行者123 更新时间:2023-12-02 03:54:16 28 4
gpt4 key购买 nike

我在 JBoss 7.1 和 Richfaces 4.1 中有一个 JSF Web 应用程序。我试图在 web.xml 中配置一个自定义错误页面,但遇到了这个问题,这对 AJAX 请求不起作用。作为解决方案,我尝试使用 Omnifaces FullAjaxExceptionHandler显示错误页面正常。

但是我想添加一个表单,允许用户输入附加信息并将其连同异常(exception)情况一起作为电子邮件发送给我。问题是在错误页面上,提交按钮不起作用。当我点击它时,错误页面刚刚重新加载。在下一次点击时,一切都按预期进行。

错误页面模板中的小菜单中的 h:commandlinks 也会出现同样的问题。

我对 JSF 很陌生,所以我真的不知道为什么会发生这种情况以及如何修复它。还是有更好的方法来实现这一目标?

最佳答案

这与 JSF spec issue 790 有关这归结为 ajax-updating 某些组件,而这些组件又包含一个或多个 <h:form>组件没有正确更新这些表单的新 View 状态标识符。

此问题已在即将推出的 JSF 2.2 中修复,但在此之前您必须使用以下基于 JavaScript 的解决方法。

jsf.ajax.addOnEvent(function(data) {
if (data.status == "success") {
var viewState = getViewState(data.responseXML);

if (viewState) {
for (var i = 0; i < document.forms.length; i++) {
var form = document.forms[i];

if (!hasViewState(form)) {
createViewState(form, viewState);
}
}
}
}
});

function getViewState(responseXML) {
var updates = responseXML.getElementsByTagName("update");

for (var i = 0; i < updates.length; i++) {
var update = updates[i];

if (update.getAttribute("id") == "javax.faces.ViewState") {
return update.firstChild.nodeValue;
}
}

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);
}

只需将其包含为 <h:outputScript name="some.js" target="head"><h:body>里面错误页面。如果不能保证页面使用JSF <f:ajax> , 那么您可能想添加一个额外的 if (typeof jsf !== 'undefined')检查之前 jsf.ajax.addOnEvent()打电话。

JSF 组件库 PrimeFaces 已经在其核心 ajax 引擎中解决了这个问题,所以如果您碰巧已经使用它,您可能希望替换所有 <f:ajax> PrimeFaces 的链接/按钮。

另见:

关于ajax - 错误页面上的错误报告表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13344969/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com