2009-11-18 6 views
0

J'ai créé une solution simple pour les colonnes/rangées extensibles avec riches: datatable et riche: la colonne, qui est similaire à: Best way to make an expandable/collapsible subTable with rich:dataTableriche: datatable et colonne extensible avec Internet Explorer

Le code facelets est (simplifié) comme suit :

<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> 

Ceci fournit une table avec une colonne étendue lorsque vous cliquez sur une boîte de détail, les détails colonne est rendu sous la ligne réelle. expandAllAction sur le bean backing parcourt juste les lignes et définit leur attribut expand de la même manière que dans le bean backing, ce qui étend/inexporte toutes les lignes.

Toutefois, cela ne fonctionne pas correctement avec Internet Explorer (IE7 ou IE8), bien qu'il fonctionne avec FF et Chrome. Si l'utilisateur clique sur la case à cocher, rien n'est rendu tant qu'il ne clique pas sur un autre endroit de la page. Le bean de sauvegarde et les objets sont en cours de mise à jour, mais il n'y a pas de ré-rendu jusqu'à ce qu'un autre élément soit cliqué.

Est-ce quelque chose de méchant à nouveau avec IE ou juste un bug avec Richfaces? J'ai trouvé un problème similaire avec IE et tbody, mais il aurait dû être corrigé. Je peux déposer un rapport de bogue mais jusqu'à ce qu'il y ait une solution de contournement simple?

La version de Richfaces est 3.3.1 et est exécutée sur Jboss 4.2.1GA et Sun RI fourni.

Répondre

1

Essayez d'utiliser un autre événement comme onclick
De tldoc de selectBooleanCheckBox: onchange est « code Javascript exécuté lorsque cet élément perd le focus et sa valeur a été modifiée depuis son foyer. » et onclick est "code Javascript exécuté quand un bouton de pointeur est cliqué sur cet élément."

Hier était un similar question. Un commentaire de BalusC pourrait confirmer mon hypothèse "dans le cas de radios/cases à cocher l'événement change est dans certains navigateurs seulement si vous cliquez deux fois"

+1

Exactement, utilisez 'onclick' à la place pour les radiobuttons/cases à cocher. – BalusC

+0

Oh mon, bien sûr. Le simple changement de l'événement "onchange" en "onclick" a résolu le problème. –

+0

Vous avez manqué ce commentaire, mais merci. –