我有一些问题与richfaces组合框/建议框。当它们与页面一起呈现时,一切都很好,但当我渲染它们所包含的内容时,它们就没有呈现,我得到一个js异常,说:
Uncaught Error: NOT_SUPPORTED_ERR: DOM Exception 9
(它看起来像A4J.AJAX.XMLHttpRequest中的东西。updatePagePart是失败的…)
相关代码:
<a:outputPanel id="autoFillPanel">
<a:outputPanel layout="none" rendered="#{myBean.renderAutofiller}">
<h:inputText id="autofillInput" value="#{myBean.value}" />
<rich:suggestionbox for="autofillInput" var="result"
suggestionAction="#{myBean.autoCompleteFiller}">
<h:column>
<h:outputText value="#{result}" />
</h:column>
</rich:suggestionbox>
</a:outputPanel>
</a:outputPanel>
任何想法?我没有这个问题与任何其他组件(h: inputttexts等..)
这似乎是webkit实现document.importNode的问题。为了避免这个问题,你可以在你的模板文件中使用这一小段javascript代码:
if( /webkit/.test( navigator.userAgent.toLowerCase() ) ){
var _importNode = window.document.importNode;
window.document.importNode = function(node, deep){
try{
return _importNode.apply(this, arguments);
} catch(e) {
if( e.code == DOMException.NOT_SUPPORTED_ERR ){
// clone and adopt
return document.adoptNode(node.cloneNode(deep));
}
throw e;
}
};
}
即使这个问题是旧的,我也遇到了同样的问题,并在我们的应用程序中解决了它。
我们有相同的设置:Richfaces 3.3.3, IE9,修改Ajax.js,允许IE9以本机模式运行,而不是模拟IE7。
在suggested box.js中,有一个解决方法可以让IE保持焦点:(第126行++)
//IE only
if (RichFaces.navigatorType() == RichFaces.MSIE) {
Event.observe(this.element, "focusout", function(event) {
//in IE8+ , event.toElement is no longer supported for focusout
var elt = event.toElement || event.relatedTarget; //CHANGE HERE
while (elt) {
if (elt == this.update) {
this.element.keepFocus = true;
elt = undefined;
} else {
elt = elt.parentNode;
}
}
}.bindAsEventListener(this));
}
有了我标记的更改,代码在IE9中运行良好,并且可以再次使用滚动条滚动。