2010-09-21 16 views
1

J'ai été googling cette question beaucoup et je ne semble pas trouver une solution. Je me demande si un développeur là-bas capable de réaliser cela? Je sais qu'il y a quelques ajax framework pour JSF comme Richfaces, les primitifs, les icefaces ... J'ai regardé leur showcase, et je n'arrivais pas à trouver ce que je cherchais.JSF: Existe-t-il un moyen de créer un effet d'animation lors de l'insertion d'un nouvel enregistrement dans une table?

+1

Peut-être que cela pourrait être d'une aide: http: // stackoverflow.com/questions/3548097/ – amorfis

Répondre

3

Voilà comment cela fonctionnerait pour h:dataTable en supposant que nous ajoutons toujours à la table:

<h:form> 
<h:panelGroup id="animatedTableGroup"> 
    <h:dataTable id="animatedTable" value="#{myBean.rows}" var="row"> 
    <h:column> 
    <h:outputText value="#{row}"/> 
    </h:column> 
    </h:dataTable> 
    <rich:jQuery timing="onload" 
     selector="#animatedTable tr:last" query="fadeOut('slow')"/> 
    <rich:jQuery timing="onload" 
     selector="#animatedTable tr:last" query="fadeIn('slow')"/> 
</h:panelGroup> 

<a4j:commandButton value="Add row" 
     action="#{myBean.addRow}" reRender="animatedTableGroup"/> 
</h:form> 

et le haricot:

public void addRow() { 
    rows.add(new Date().toString()); 
} 

public List<String> getRows() { 
    return rows; 
} 

Si vous souhaitez insérer dans la position sélectionnée dans la table, il est préférable d'utiliser rich:extendedDataTable et utiliser quelque chose comme ceci comme sélecteur:

<rich:jQuery timing="onload" 
     selector="#animatedTable tr.rich-sdt-row-selected" query="..."/> 
+0

Je n'ai pas RichFaces sous la main, mais cela ressemble à ça, ça va marcher. L'avez-vous testé en pratique? – BalusC

+0

@BalusC Oui, testé. Ça marche. – theorm

1

RichFaces a un support natif pour jQuery utilisant rich:jQuery composant. Vous pouvez utiliser les effets pris en charge par jQuery. Par exemple:

<h:commandButton id="submitButton" value="Submit" 
    action="#{myBean.myAction}" style="display: none;"/> 
<rich:jQuery selector="#submitButton" 
    query="fadeIn('slow')" timing="onload"> 

ou

<h:commandButton id="submitButton" value="Submit" 
    action="#{myBean.myAction}" 
    onmouseover="jQuery(this).fadeOut('slow');" 
    onmouseout="jQuery(this).fadeIn('slow')"/> 

Vous pouvez trouver d'autres exemples ici: http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/rich_jQuery.html

+0

Tout est bon et agréable, mais cela ne répond pas à la vraie question. Veuillez poster un extrait/exemple qui démontre exactement l'exigence fonctionnelle telle que décrite par le PO. C'est un peu compliqué (supposons qu'un 'dataTable' est utilisé comme table pour insérer la nouvelle ligne). En passant, PrimeFaces enveloppe toute cette verbosité jQuery particulière dans un composant ['p: effect'] (http://www.primefaces.org/showcase/ui/effects.jsf), entre autres. – BalusC

+0

@BalusC Fait sens. Posté un autre exemple. – theorm