Rich: coluna Datatable e expansível com o Internet Explorer
-
20-09-2019 - |
Pergunta
Criei uma solução simples para colunas/linhas expansíveis com Rich: Datatable and Rich: coluna, que é semelhante a: Melhor maneira de tornar uma subtable expansível/dobrável com Rich: Datatable
O código do Facelets é (simplificado) da seguinte maneira:
<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>
Isso fornece uma tabela com coluna expandida quando você clica em uma caixa de detalhes, a coluna de detalhes é renderizada abaixo da linha real. O ExpandAllaction no backing Bean apenas itera sobre linhas e define seu atributo expandido para o mesmo que no feijão de apoio, expandindo/não fornece todas as linhas.
No entanto, isso não funciona corretamente com o Internet Explorer (IE7 ou IE8), embora funcione com FF e Chrome. Se o usuário clicar na caixa de seleção, nada será renderizado até que ele clique em qualquer outro local na página. O backup de feijão e objetos estão sendo atualizados, mas nenhuma renderização até que algum outro elemento seja clicado.
Isso é algo perverso de novo com IES ou apenas um bug com Richfaces? Encontrei algum problema semelhante com o IE e o TBody, mas ele deveria ter sido corrigido. Eu posso arquivar um relatório de bug, mas até isso, existe alguma solução alternativa simples?
A versão Richfaces é 3.3.1 e é executada no JBoss 4.2.1Ga e Sun Ri.
Solução
Tente usar outro evento como onclick
De tldoc de SelectBooleancheckBox: onchange
é "O código JavaScript executado quando esse elemento perde o foco e seu valor foi modificado desde a obtenção de foco". e onclick
é "Código JavaScript executado quando um botão de ponteiro é clicado por esse elemento."
Ontem foi um pergunta semelhante. Um comentário de Balusc pode confirmar minha suposição "No caso de rádios/caixas de seleção, o evento de mudança está em certos navegadores apenas disparados se você clicar 2 vezes"