gpt4 book ai didi

jsf - 为什么在 jsf 中使用任何 a4j 元素添加到页面代码第二个 body 和 head 标签?

转载 作者:行者123 更新时间:2023-12-03 04:11:27 25 4
gpt4 key购买 nike

在我的 jsf 页面代码中,我有一个与此类似的结构:

<frameset id="navframeset">
<frame name="navframe" src='<c:url value="TopNavigation.jsf"/>'/>
<frameset>
<frame name="leftframe" src='<c:url value="Test1.jsf"/>'/>
<frame name="tabbedframe" src='<c:url value="Test2.jsf"/>' />
</frameset>

在 Test2.jsf 中,我包含以下 richfaces 库:

<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>

当我尝试在页面代码中使用任何 a4j 元素(例如 a4j:button)时,会在我的输出 html 文件中生成此代码:

<head>...</head>
<body>..</body>
<head><script xmlns="http://www.w3.org/1999/xhtml">A4J.AJAX._scriptEvaluated=true;</script></head>
<body marginwidth="0" marginheight="0"></body>

当我在页面代码中使用 a4j 元素时添加最后两行,它复制现有的 body 和 html 标签(前两行)。我使用的richfaces版本是3.1.6.SR1。有人可以给我提示如何解决它吗?

最佳答案

好的,这是 3.1.6.SR1 库的问题,是最后一个支持 jsf 1.1 版本的库。我在谷歌中找到了以下解决方案 https://developer.jboss.org/thread/196997?tstart=0 。然而它并不完美,并且并不适用于所有情况。因此,我试图以其他方式解决此问题,并且根据上面链接中的建议,我已将 AJAX.js 文件更改为 richfaces-impl.jar。我从 richfaces-3.2 版本中获取了 AJAX.js 文件并替换了 3.1.6.SR1 中的代码。应更改以下部分:

第 1412 行//添加了 A4J.AJAX.TestScriptEvaluation();

A4J.AJAX.processResponse = function(req) {
A4J.AJAX.TestScriptEvaluation();
var options = req.options;
var ajaxResponse = req.getResponseHeader('Ajax-Response');

第 2014 行 TestScriptEvaluation 函数应替换为以下函数:

//Test for re-evaluate Scripts in updated part. Opera & Safari do it.
A4J.AJAX._scriptEvaluated=false;
A4J.AJAX.TestScriptEvaluation = function () {
if ((!document.all || window.opera) && !A4J.AJAX._scriptTested){


try{
// Simulate same calls as on XmlHttp
var oDomDoc = Sarissa.getDomDocument();
var _span = document.createElement("span");
document.body.appendChild(_span);
// If script evaluated with used replace method, variable will be set to true
var xmlString = "<html xmlns='http://www.w3.org/1999/xhtml'><sc"+"ript>A4J.AJAX._scriptEvaluated=true;</scr"+"ipt></html>";
oDomDoc = (new DOMParser()).parseFromString(xmlString, "text/xml");
var _script=oDomDoc.getElementsByTagName("script")[0];
if (!window.opera && !A4J.AJAX.isWebkitBreakingAmps() && _span.outerHTML) {





_span.outerHTML = new XMLSerializer().serializeToString(_script);
} else {
var importednode ;
importednode = window.document.importNode(_script, true);
document.body.replaceChild(importednode,_span);
}

} catch(e){ /* Mozilla in XHTML mode not have innerHTML */ };

}

A4J.AJAX._scriptTested = true;
}

仅此而已。通过此更改,此问题不再存在。

关于jsf - 为什么在 jsf 中使用任何 a4j 元素添加到页面代码第二个 body 和 head 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34656354/

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