2009-02-03 15 views
3

Nous avons le problème suivant ...JSF grains de portée de la session avec la navigation par onglets

environnement de l'application:

JSF, RichFaces, a4j

Tenir compte ayant le scénario suivant:

  • L'utilisateur se connecte au système
  • L'utilisateur accède à une nouvelle page composée d'un formulaire a4j contenant des composants a4j, l'utilisateur remplit le formulaire mais ne le soumet pas.
  • L'utilisateur ouvre un nouvel onglet et ouvre la même URL et remplir le nouveau formulaire avec les nouvelles données
  • Les retours des utilisateurs à son premier onglet et soumet les informations (Note: Tous les haricots sont définis sont la portée de la session)

Résultat:

les informations fournies sont les informations de la deuxième onglet, mais soumis à partir du premier onglet, qui devrait aussi longtemps que les fèves sont définis comme la portée de la session.

Problème:

Nous devons obtenir le comportement d'un champ de requête (i.e.: traiter un nouvel onglet comme une nouvelle demande, bien que le grain est défini comme un champ de session).

Notes:

Lors de la définition du champ de haricots comme champ de demande la réponse partielle Ajax à partir de composants individuels sous la même forme, remet à zéro les autres composants puisqu'ils ne sont pas encore soumis.

Des suggestions?

-

Merci beaucoup

Répondre

2

Ce problème est bien connu pour les applications Web.

Bien sûr, vous pouvez essayer de résoudre ce problème en utilisant plus de code personnalisé mais ma suggestion rapide est d'utiliser le seam framework qui résout exactement cela. Seam est un sur-ensemble de JSF et introduit un nouveau conversation scope pour les haricots qui fait exactement ce que vous voulez. Seam prend en charge nativement les richfaces (les deux sont des projets de JBoss/Redhat) donc vous ne devriez pas vous attendre à des problèmes d'intégration avec .

0

Quelle est la raison pour laquelle le bean doit être dans la portée de la session?

Si ce n'est que pour obtenir la fonctionnalité ajax, vous pouvez modifier le bean à la demande et utiliser la balise a4j:keepAlive.A4j: keepAlive étend le cycle de vie pour le bean scope de requête, votre instance de bean agit alors comme dans la portée de session pour les requêtes ajax. Lorsque l'utilisateur ouvre deux pages de la même page, il utilise deux instances de bean différentes.