2010-10-05 4 views
0

J'ai une table de base de données pour les messages de journal et à tout moment il peut être inséré de nouvelles lignes. Je veux les montrer dans la grille et quand vous faites défiler vers le bas je veux demander plus de rangées forment cette table (côté de serveur) mais sans être affecté des nouvelles rangées ajoutées. Les nouvelles lignes ne doivent être visibles que si je rafraîchis toute la grille.SmartGWT RestDateSource et Paging (Large DataSet de) données dynamiques

Je ne suis pas sûr comment puis-je demander des lignes dans une plage (de, à) en utilisant JDBC. Je pense qu'il n'y a aucune requête SQL portable (à travers des bases de données déférentes) pour faire cela? (J'utilise MYSQL)

Je pense qu'après avoir lu la première page de ce tableau, je dois envoyer au client l'ID Max de la table de journal et après cette demande de nouvelles lignes en utilisant cet ID Max comme paramètre en SQL (OERE ID < = MAXID) mais je ne suis pas sûr comment je peux passer ce paramètre du serveur au client et en arrière en utilisant RestDateSource?

Avez-vous une meilleure idée de comment je peux faire cela?

P.S. J'utilise la version LGPL SmartGWT et j'utilise mes propres servlets côté serveur.

+0

J'ai une autre idée: je peux trouver ce MAXID à partir du résultat de la première page (id de la première ligne reçue), mais cela ne fonctionnera que si je désactive le tri dans l'interface utilisateur. Mais comment envoyer ce paramètre du client au serveur pour d'autres pages et comment demander des lignes à portée avec JDBC? –

Répondre

1

Voici ce que je ferais; J'imagine que vous avez un numéro croissant ou un horodatage pour chacune de vos lignes. Avant de commencer à rechercher des données, vous appelez un service web pour interroger l'identifiant courant (par exemple, la dernière ligne insérée est 12345).

Ensuite, vous ajoutez un objet Criteria à votre source de données qui dit "rowId < = 12345". À ce stade, vous pouvez utiliser la grille librement - la pagination, le tri, etc. fonctionneront automatiquement car les nouvelles lignes seront automatiquement exclues.

(Ou si vous utilisez une source de données personnalisée et non la valeur par défaut RESTdataSource, vous faites essentiellement la même chose sans utiliser explicitement Criteria).

+0

C'est exactement ce que j'ai fait et ça marche super :) –

+0

Et en passant, comment puis-je faire "moins ou égal" crieteria? –

+0

J'opterais pour "rowId <(12345 + 1)" – Lenz

0

SmartGWT Pro et mieux de le faire automatiquement. Même si vous ne voulez pas utiliser Pro, vous pouvez télécharger l'évaluation (smartclient.com/builds) et regarder la console côté serveur, où les requêtes SQL sont consignées.

+0

J'ai vu qu'ils utilisent LIMIT (SQL) mais ils ont toujours le problème avec les lignes nouvellement insérées. http://www.stackoverflow.com.s3.amazonaws.com/Concurent%20Insert.png –

+0

Nous fournissons un indicateur que vous pouvez définir sur une réponse du serveur pour invalider le cache actuel. Déterminer quand invalider le cache est quelque chose que vous faites sur la base d'une stratégie similaire à celle ci-dessus (rowId), sauf bien sûr que la stratégie ne gère pas la suppression. Comme cela nécessite que vous ayez un champ de séquence ou similaire pour suivre les changements, nous ne l'activons pas automatiquement. Mais il est facile d'ajouter si vous avez les données disponibles pour faire la détection. Notre framework de serveur vous permet d'ajouter une logique Java qui s'exécute en plus de l'opération SQL automatique pour ce type d'utilisation. –