2010-11-24 37 views
0

Salutations,JSF dataTable pour afficher un nombre fixe de lignes

Le contexte est MyFaces 2.0.2, peut-être aussi ajouter Tomahawk 20-1.1.10

J'ai créé un dataTable (actuellement un h:dataTable, mais pourrait également être un t:dataTable en utilisant Tomahawk) affichant certains attibuts d'un List<MyObject> dans un haricot de support. J'ai pagination en retournant seulement un subList de la liste, et en triant également par le clic des en-têtes de colonne.

La prochaine chose que je dois faire est de m'assurer que la table affiche toujours un nombre fixe de lignes. Par exemple, si la taille de ma page est de 5 et que j'ai 12 éléments dans la liste, j'ai besoin de la page trois pour afficher les deux derniers éléments, plus 3 lignes vides.

J'ai essayé de « pad » le subList avec les valeurs nulles et les instances de myObject avec des valeurs nulles, mais cela conduit à ConcurrentModificationException en frappant la dernière page de la table (la vue essayait de getDisplayList même que la méthode d'échange était toujours en ajoutant les valeurs supplémentaires.). J'ai ensuite essayé de remplir la liste principale de la même manière, mais j'ai ensuite obtenu NullPointer sur mes fonctions de tri (une évidence en arrière). De plus, ces choses sont toutes ajoutées dans le backing, quand je préfère le faire dans la vue xhtml.

(h:/t:)dataTable possède un attribut rows, mais spécifie le nombre maximum de lignes à afficher, et non le minimum, selon mes besoins.

Des idées, s'il vous plaît?

Répondre

0

Ne pas remplir la sous-liste. Tamponnez la liste. De préférence immédiatement après l'avoir récupéré dans le haricot.

+0

Vous remarquerez que c'est l'une des choses que j'ai essayé. Le résultat est une exception NullPointer sur les fonctions de tri. J'utilise des classes internes Comparator internes, et la déclaration de la fonction "public int compare (MyObject obj1, MyObject obj2)" est l'endroit où l'exception est levée si les objets eux-mêmes sont nuls. Si les objets ne sont pas NULL mais que leurs valeurs sont, alors une exception est lancée dans cette fonction quand j'ai, disons "return obj1.getStringValue(). CompareTo (obj2.getStringValue());" – cobaltduck

+0

Ah, c'est vrai. Puis enveloppez la sous-liste dans une nouvelle liste ArrayList et remplissez-la à la place avant de revenir à la vue. – BalusC

0

La solution ici était de pad de la liste principale, plutôt que la sous-liste, en utilisant des objets qui ne sont pas nuls, mais dont les attributs sont nuls, et d'ajouter un chèque nul dans le Comparator:

if (obj1.getSomeValue() == null) { 
    return +1; 
} 
else if (obj2.getSomeValue() == null) { 
    return -1; 
} 
else { 
    // primary sorting code 
} 

qui assure Les articles Nuls viennent toujours en dernier. Fonctionne parfaitement. BalusC m'a donné la poussée dans la bonne direction, alors j'accepte sa réponse.