2010-05-24 3 views
1

J'utilise JSF 1.1 sur WebSphere 6.1. Je développe des fonctionnalités de recherche dans une application et j'ai quelques problèmes. J'ai dépouillé les extras, et je me suis laissé avec les éléments suivants:Beans gérés en tant que propriétés gérées

4 haricots gérés:

  • SearchController - haricot contrôleur, la portée de la session
  • SearchResults - champ d'application de la session (stocker les résultats)
  • ProductSearch - champ d'application de la session (enregistrer les conditions de recherche)
  • ResultsBacking - haricot de sauvegarde DataTable, utilisé pour déterminer quelle ligne a cliqué, demander la portée

Le bean SearchController possède, en tant que propriétés gérées, les trois autres. Tous sauf ResultsBacking sont des tronçons de session.

S'il n'y a qu'un seul élément dans les résultats de la recherche, je veux afficher directement cet enregistrement. J'appelle setFirst (0) pour la table de données dans la méthode ResultsBacking (je veux utiliser la méthode existante qui gère quel élément a été cliqué, donc cela est appelé juste après le setFirst).

Lorsque je vais faire une autre recherche, j'obtiens une exception IllegalArgumentException lors de l'appel de getRowData dans la table de données. Selon l'API, ceci est jeté 'si maintenant (sic) les données de ligne sont disponibles à l'index de ligne actuellement spécifié'.

Je suis confus quant à la raison pour laquelle cela se produit. Cela fonctionne la première fois mais pas la seconde. Dois-je supprimer le ResultsBacking sur une nouvelle recherche pour me débarrasser de l'ancien état?

+0

Je viens de faire quelques modifications, je n'utilise plus setFirst (0). Si isRowAvailable est false, j'obtiens la première entrée directement de SearchResults ArrayList (au lieu de getRowData()). Cela fonctionne, mais me semble un peu sale. – Sean

+0

Montrez une partie de votre code en particulier autour du 'setFirst()' – Damo

+0

Vous devriez publier un peu de SSCCE de ce que vous faites, car il est assez difficile d'aider autrement. – dendini

Répondre

0

Dans la méthode getFirstRow de mon bean backing, j'étais appel setFirst (0) sur la base de données. Changer ceci en setRowIndex (0) résout le problème.

Questions connexes