J'ai plusieurs données disponibles et j'utilise ajax pour charger les données DataTables. J'ai mappé un bean géré avec DataTables et, via une mise à jour ajax, je peux accéder à la base de données et obtenir / récupérer les enregistrements de la base de données. Le problème est que peu de tables peuvent avoir peu d'enregistrements à afficher et quelques-uns ont plus.Je veux montrer les enregistrements qui sont disponibles en premier lieu à la place de toutes les tables à charger. Veuillez suggérer. Merci d'avance.
Dans la plupart des grandes applications de données, ce scénario est important, en particulier lorsque vous disposez de données avec une grande donnée à récupérer à partir de la base de données, c'est essentiellement un moyen de déchargement.
Avant de répondre à cette question, je voudrais souligner que l'utilisation des getters / setters pour une logique / extraction est une mauvaise idée, car ils sont appelés à plusieurs reprises pendant le cycle de vie.
Pas:
Séparez la logique des getters à d'autres méthodes d'extraction / génération.
public void fetchSpreadList() { //fetch from DB and set spreadList setSpreadList(db.findSpreadList()); } public void fetchTransList() throws Exception { //fetch from DB and set TransList setTransList(db.findTransList()); } //getters public List<SpreadInformationDTO> getSpreadList() { return spreadList; } public List<TransHistoryDataDTO> getTransList() { return transList; }
Recherche des données en utilisant remoteCommand
<p:remoteCommand name="fetchSpread" actionListener="#{transactionMB.fetchSpreadList}" update=":form1:spreadInfo" onstart="preTableIsLoading(PF('widVarMnmsInfo'))" oncomplete="postTableIsLoading(PF('widVarMnmsInfo'))"> </p:remoteCommand> <p:remoteCommand name="fetchTrans" actionListener="#{transactionMB.fetchTransList}" update=":form2:withdrawInfo" onstart="preTableIsLoading(PF('widVarBrmOrderInfo'))" oncomplete="postTableIsLoading(PF('widVarBrmOrderInfo'))"> </p:remoteCommand>
Chaque télécommande récupère les données une fois la page chargée et met à jour la base de données. onstart
et oncomplete
here sont des indicateurs de chargement, en passant un widgetVar
à preTableIsLoading
et postTableIsLoading
. Remarque: si vous utilisez PF 3.5 ou inférieur, passez le raccourci widgetVar sans PF
.
preTableIsLoading
et postTableIsLoading
(javascript)
function preTableIsLoading(widget) { widget.jq.find('.ui-datatable-empty-message td').hide(); widget.jq.find('.ui-datatable-empty-message') .append('<span class="tableLoadingSpan" />'); } function postTableIsLoading(widget) { widget.jq.find('.ui-datatable-empty-message td').show(); widget.jq.find('.ui-datatable-empty-message span').remove(); }
Lorsque la récupération commence, cachez le message vide et ajoutez-le un gif de chargement, lorsque l'extraction est terminée, affichez le message vide (si la donnée est vide) et supprimez l'indicateur gif de chargement.
Indicateur Gif de chargement (CSS)
.tableLoadingSpan { background: url("#{resource['/images/loaderTables.gif']}"); display: block; height: 40px; margin-top: 20px; background-repeat: no-repeat; }
La dernière chose à envisager d'utiliser un chargement paresseux dans vos tables.
Modifier:
Afin d'éviter l'erreur d'objet jQuery undefined
dans le javascript, supprimez autoRun
des RemoteCommands (que j'ai déjà supprimé de cette réponse) et appelez le remoteCommands dans le $(document).ready()
cette façon, vous vous assurez que le widgetVar est prêt à utiliser.
$(document).ready(function() { //calling remoteCommands fetchSpread(); fetchTrans(); })