【问题标题】:RichFaces comboBox/suggestionBox rerender-problemRichFaces 组合框/建议框重新渲染问题
【发布时间】:2011-08-15 14:36:49
【问题描述】:

我在使用 Richfaces 组合框/建议框时遇到了一些问题。当它们与页面一起呈现时一切正常,但是一旦我重新呈现它们所包含的内容,它们就不会被呈现并且我得到一个 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 等)

【问题讨论】:

  • 每个浏览器都会出现这个错误吗?
  • 您使用的是哪个版本的 Richfaces?
  • 我不知道这是否会有所帮助,但是 Richfaces 在 IE9 中无法正常工作,请参阅 community.jboss.org/thread/156720issues.jboss.org/browse/RF-9485。我们必须对其进行修补才能使其正常工作(请参阅链接)。我们仍然遇到建议框的一些问题,例如如果您尝试使用滚动条,建议会消失。到目前为止,除了 IE9 之外,其他一切对我们来说似乎都还可以。
  • @reevesy 甚至重新渲染控件?
  • 到目前为止,重新渲染没有任何具体问题,但我们在可重新渲染面板中没有我们的建议框。但我认为您可能遇到了 IE9 问题?

标签: jsf richfaces


【解决方案1】:

这似乎是 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;
        }
    };
}

【讨论】:

    【解决方案2】:

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

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

    在suggestbox.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 中对我来说运行良好,并且可以再次使用滚动条滚动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 2011-08-24
      • 2011-11-26
      • 2011-03-12
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多