rich:datatable и расширяемый столбец с помощью Internet Explorer
-
20-09-2019 - |
Вопрос
Я создал простое решение для расширяемых столбцов/строк с помощью rich:datatable и rich:column, которое похоже на: Лучший способ создать расширяемую/сворачиваемую подтаблицу с помощью rich:dataTable
Код фасетов (упрощенный) выглядит следующим образом:
<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.
Решение
Попробуйте использовать другое событие, например onclick
Из документа выберитеBooleanCheckBox: onchange
является «Код Javascript выполняется, когда этот элемент теряет фокус и его значение было изменено с момента получения фокуса». и onclick
является «Код Javascript выполняется при нажатии кнопки указателя на этот элемент».
Вчера был аналогичный вопрос.Один комментарий BalusC может подтвердить мое предположение. «в случае радио/флажков событие изменения в некоторых браузерах запускается только в том случае, если вы нажмете 2 раза»