RichFaces comboBox / suggestionBox rerender-problem

时间:2011-08-15 14:36:50

标签: jsf richfaces

我在使用richfaces combobox / suggestionbox时遇到了一些问题。当它们与页面一起呈现时,一切正常,但是当我重新呈现它们时,它们就被包含在内,它们不会被渲染,我得到一个JS异常说:

  

未捕获错误:NOT_SUPPORTED_ERR:DOM异常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:inputTexts等..)

2 个答案:

答案 0 :(得分:1)

这似乎是document.importNode的webkit实现的一个问题。要解决此问题,您可以在模板文件中使用这一小段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;
        }
    };
}

答案 1 :(得分:0)

即使这个问题是 old ,我遇到了同样的问题并在我们的应用程序中解决了它。

我们有相同的设置:Richfaces 3.3.3,IE9,修改了Ajax.js以允许IE9以纯模式运行而不是模拟IE7。

在suggestionbox.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中运行正常,并且可以再次滚动滚动条。