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.

Foi útil?

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"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top