RichFaces comboBox / offertionBox проблема повторного отображения - PullRequest
0 голосов
/ 15 августа 2011

У меня проблемы с выпадающим списком richfaces.Все отлично работает, когда они отображаются вместе со страницей, но как только я переопределяю их содержимое, они не отображаются, и я получаю исключение JS, говорящее:

UncaughtОшибка: 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: inputTexts и т.д ..)

Ответы [ 2 ]

1 голос
/ 01 августа 2012

Похоже, проблема с реализацией 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;
        }
    };
}
0 голосов
/ 16 декабря 2013

Даже когда этот вопрос старый , я столкнулся с той же проблемой и решил ее в нашем приложении.

У нас такая же настройка: 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 для меня, и прокрутка с помощью полосы прокрутки снова возможна.

...