Richfaces datatable - l'ajout d'une nouvelle ligne sans l'ensemble datatable nouveau rendu sur le côté client
-
13-10-2019 - |
Question
La nouvelle ligne peut être ajouté à la collection côté serveur associé à un événement d'action d'un bouton de commande ou un lien de commande, et la ligne nouvellement ajoutée peut être affiché sur le client si toute la table est re- rendu .
Est-il possible d'afficher la nouvelle ajouté rangée du côté client sans avoir besoin de rafraîchir l'ensemble datatable , en utilisant la partie rendu , avec l'aide de AjaxKeys ou quelque chose?
Merci d'avance pour toute aide:)
La solution
Vous devez rerender toute datatable si vous ajoutez une nouvelle ligne. AjaxKeys peut être utile si vous voulez rerender les colonnes existantes.
Autres conseils
Je suis très intéressé aussi connaître une réponse à votre question, Je peux y parvenir en utilisant Javascript traditionnel, mais quand je l'utilise riche. Datatable Je ne peux pas ajouter de nouvelles lignes sur le client
Mais je l'ai fait en utilisant Ajax appels à des fonctions de serveur, cette fonction ajouter une nouvelle ligne vide à la liste dataTable et rendre les riches. Datatable à nouveau
ma page xhtml
<rich:column>
<f:facet name="header"><h:outputLabel value="#{msgs.notes}" style="font-size:15px;"/> </f:facet>
<h:inputText value="#{line.notes}" >
<a4j:ajax event="blur"
execute="datatable"
render="datatable"
immediate="true"
listener="#{saleBacking.addNewLineInDataTable}"
oncomplete="document.getElementById('myform:datatable:#{saleBacking.view_no_counter-1}:line').focus();"/>
</h:inputText>
</rich:column>
et dans la fève maneged
public void addNewLineInDataTable(AjaxBehaviorEvent event)
{
SaleLine saleLine = new SaleLine();
saleLine.setId(salesLineslist.isEmpty() ? 1 : salesLineslist.get(salesLineslist.size() - 1).getId() + 1);
salesLineslist.add(saleLine);
saleLine = new SaleLine();
saleLine = new SaleLine();
saleLine.setSaleId(sale);
saleLine.setViewNo(++view_no_counter);
saleLine.setDiscount(0d);
saleLine.setItemPrice(0d);
salesLines.add(saleLine);
}