богатая: колонка с возможностью обработки данных и расширения с помощью Internet Explorer - PullRequest
0 голосов
/ 18 ноября 2009

Я создал простое решение для расширяемых столбцов / строк с помощью rich: datatable и rich: column, которое похоже на: Лучший способ создать расширяемую / складываемую подтаблицу с rich: dataTable

Код Facelets (упрощенно) выглядит следующим образом:

<rich:dataTable id="detailtable"
    value="#{bean.model}"
    var="row"
    columns="2">
    <rich:column id="detail-check">
        <f:facet name="header">
            <h:selectBooleanCheckbox value="#{bean.expandAll}">
                <a4j:support event="onchange" action="#{bean.expandAllAction}"
                    reRender="detailtable" />
            </h:selectBooleanCheckbox>
        </f:facet>
        <h:selectBooleanCheckbox value="#{row.expanded}">
            <a4j:support event="onchange" reRender="detailtable" />
        </h:selectBooleanCheckbox>
    </rich:column>
    <!-- actual data column -->
    <rich:column id="detail-column"
        rendered="#{row.expanded}"
        breakBefore="true"
        colspan="2">
        <!-- detail column content -->
    </rich:column>
</rich:dataTable>

Это обеспечивает таблицу с расширенным столбцом, когда вы щелкаете мышью на поле сведений, столбец сведений отображается ниже фактической строки. expandAllAction на базовом компоненте просто перебирает строки и устанавливает их расширенный атрибут таким же, как в базовом компоненте, расширяя / расширяя все строки.

Однако это не работает корректно с Internet Explorer (IE7 или IE8), хотя работает с FF и Chrome. Если пользователь нажимает на флажок, ничего не отображается, пока он не щелкнет в любом другом месте на странице. Поддерживающий компонент и объекты обновляются, но повторный рендеринг не выполняется, пока не будет нажат какой-либо другой элемент.

Это опять что-то нехорошее с IE или просто ошибка с Richfaces? Я нашел похожую проблему с IE и tbody, но она должна была быть исправлена. Я могу подать отчет об ошибке, но до этого есть ли простой обходной путь?

Версия Richfaces - 3.3.1, она работает на Jboss 4.2.1GA и в комплекте Sun RI.

1 Ответ

1 голос
/ 18 ноября 2009

Попробуйте использовать другое событие, например onclick
Из tldoc selectBooleanCheckBox : onchange is "Javascript-код выполняется, когда этот элемент теряет фокус и его значение было изменено с момента получения фокуса." и onclick равно " Код Javascript, выполняемый при нажатии кнопки указателя над этим элементом. "

Вчера был похожий вопрос . Один комментарий BalusC может подтвердить мое предположение "в случае радиомодулей / флажков событие изменения в определенных браузерах срабатывает только при нажатии 2 раза"

...