2010-01-22 13 views
0

J'ai créé une application Web Java contenant une feuille de tobago. J'essaie maintenant de surcharger le mécanisme de tri de la feuille en utilisant l'attribut sortActionListener.La méthode de tri des feuilles de Java java prioritaire ne montre pas les données

Lorsque je clique sur une colonne, ma méthode de tri est lancée. Je peux lire le nom de la colonne et faire des choses SQL pour obtenir les données que je voudrais afficher maintenant. Le tri est effectué en raison de la requête SQL. Le problème est que la feuille n'affiche pas les données, elle est vide.

C'est le message d'erreur que je reçois:

org.apache.myfaces.custom.ajax.api.AjaxPhaseListener - composant Trouvé est pas ajaxComponent

Quelqu'un at-il une idée comment résoudre ceci? Est-ce que ma feuille doit être quelque chose comme ajax-enabled ou ce qui ne va pas?

Merci d'avance!

MISE À JOUR:

J'ai trouvé que le message d'erreur est due à un conflit entre la bibliothèque Tomahawk-bac à sable et TOBAGO. Après avoir supprimé la sandbox lib, le message d'erreur disparaît. Néanmoins, j'ai toujours des problèmes avec la vue.

Si je passe manuellement le gestionnaire d'événements, tout fonctionne correctement, car la page jsp sera rechargée après le gestionnaire d'événements. C'est parfait. MAIS si j'exécute le code tout seul sans effectuer d'étape manuelle, la page jsp n'est PAS rechargée et donc je ne peux pas voir les données.

Pourquoi est-ce le cas et comment puis-je persuader mon code d'actualiser la page jsp et donc la feuille? ;)

Répondre

0

Pour afficher les résultats, il neccessaire d'interagir avec la feuille elle-même - ce qui en fait en quelque sorte le sens;)

List<SheetData> sheetData = (List<SheetData>) sheet.getValue(); 

... performing SQL query ... 

sheetData = sqlresult; 

C'est tout;) Obtenez la valeur de la feuille, effectuer le SQL interroger et envoyer le résultat à l'objet sheetData. La feuille sera rafraichie quand elle sera finie.

Mais j'ai décidé de me débarrasser de la requête SQL car cela prend beaucoup de temps (base de données très vaste et complexe, ne demandez pas ...). Je vais maintenant de l'avant en créant un comparateur.

Comparator<SheetData> comparator = null; 

comparator = new Comparator<SheetData> { 

    public int compare(SheetData sd1, SheetData sd2) { 

     int rc = 0; 

     if (rc == 0) { 
      rc = sd1.getString("Field").compareTo(sd2.getString("Field")); 
     } 

     if (rc == 0) { 
      rc = sd1.getString("Field2").compareTo(sd2.getString("Field2")); 
     } 

     return rc; 
    } 
}; 

Collections.sort(sheetData, comparator); 

Le comparateur pouvez trier autant de champs que je veux et son rapide;) Vous pouvez voir l'état de la feuille (ascendant/descendant) dans le sortColumn, qui ne sera pas montré avec ma première approche (SQL question).