9
votes

Utilisation de JSF avec plusieurs onglets dans un navigateur

Par défaut JSF semble être très "sotculeux". Je dois permettre aux gens d'utiliser notre application avec plusieurs onglets qui font de nombreuses choses dans différentes parties de l'application.

Je n'arrive pas à trouver des instructions décentes pour que cela se produise sans beaucoup de réingénierie.

Nous n'utilisons actuellement pas de glaces, mais je viens de trouver cela dans les documents de glace:

6.5.7. Portefacs de glace et vues de Dom simultanées

glaceFaces fournit une fonctionnalité appelée Des vues de DOM simultanées qui contrôlent Que ce soit ou non le cadre de glace Prend en charge plusieurs vues d'un seul application du même navigateur. Lors de la course dans un conteneur de portlet, Les glaces doivent traiter les distincts portlets sur une page de portail unique comme vues distinctes donc c'est presque toujours nécessaire (et donc sûre) à avoir ce paramètre défini sur true.

exemple 6.19. Permettant aux glaces Fonctionnalité de vues DOM simultanée dans le Web-Inf / Web.xml Fichier de configuration afin ces portlets séparés sur le même La page Portal est traitée comme distincte Vues

com.esoft.faces.concurrentDomviews vrai

Donc, je veux savoir si cette fabuleuse fonctionnalité de sondage s'appliquerait éventuellement à mes formulaires H: ou si cela ne fonctionne que avec des composants de laface de glace?

Quelqu'un peut-il offrir de bons conseils pour obtenir une application JSF travaillant dans plusieurs onglets?


1 commentaires

Mise à jour: Je viens d'essayer d'inclure des glaces.jar dans mon projet et de documenter le web.xml comme indiqué ci-dessus. Aucun impact positif notable. Bien qu'il semble indiquer ici qu'il devrait simplement fonctionner si j'utilise H: Head et H: Corps: wiki.icefaces.org/display/ice/getting+Started et Icefaces.org/docs/v1_8_2/htmlguide/DevGuide/...


4 Réponses :


4
votes

myFaces Orchestra a un moyen de traiter plusieurs onglets / fenêtres (à l'aide de la conversationContext Obtenir le paramètre).


0 commentaires

4
votes

utiliser couture avec le cadre JSF que vous voulez.

the La conversation contexte est parfaite pour utiliser différents languettes. Il suffit de commencer une nouvelle conversation sur chaque onglet. :)

Jetez un coup d'œil au Réservation de la démo

S'il vous plaît ne pas utiliser la couture, ce n'est pas pris en charge. Utilisez JSF 2.0 comme indiqué dans cette réponse https://stackoverflow.com/a/3203670/4206


0 commentaires

9
votes

dans JSF 2.0 Vous pouvez utiliser la portée de la vue pour cela, Annotable en utilisant @viewscoped . Vous pouvez même définir Scopes personnalisés .

Voir aussi:


7 commentaires

Merci Balusc. C'était beaucoup de réingénierie comme je craignais, mais en utilisant des haricots ciblés au lieu de la session Scoped, c'est maintenant beaucoup mieux.


Mais la portée de la portée fonctionne-t-elle dans une navigation sur la navigation ?? Parce que j'ai essayé de faire fonctionner et de reconstruire le haricot à la vue suivante !!


Non, ça ne le fait pas. La portée de la vue vit aussi longtemps que vous interagissez avec / naviguer vers la page même . Vous devez utiliser une session SPOPED Bean ou pour redéfinir vos vues pour utiliser du contenu de manière conditionnelle / inclus.


@Ballusc: une petite question, tout en travaillant à travers plusieurs onglets lorsque vous laissez une vue dans certains onglets et que vous travaillez avec la même partie de l'application dans un autre onglet, puis revenez à l'ancienne tabulation, le haricot affichage (servant l'ancienne tab) survivre ? En d'autres termes, une session d'utilisateur peut-elle avoir plusieurs instances de la même vue des haricots scopés qui seraient créés en fonction du no. des onglets, il travaille avec cette partie de l'application?


Chaque onglet a sa propre vue de haricot scopé. Il est toujours créé sur une demande d'obtention et des onglets ne peuvent être ouverts que par obtenir des demandes d'obtenir.


Ce qui signifie que les données survivront jusqu'à ce que l'onglet soit fermé ou que la vue est modifiée à travers cet onglet, non?


Je pense que c'est la caractéristique la plus inconnue / mal comprise / sous-estirée de JSF! Merci.



5
votes

Je ne pense pas que la portée de la vue fonctionnera ici. La question concerne spécifiquement un scénario à onglet multi-navigateurs et ma compréhension avec la portée de la vue est qu'il existe encore un état distinct par vue (non par onglet). En d'autres termes, si vous avez la même page ouverte dans plusieurs onglets de navigateur, vous êtes à risque d'état de partage.

Ceci est mentionné ici: http://www.java.net/node/692109

On dirait que deux solutions ne sont que deux solutions à ce problème: 1. Portée de conversation CDI / couture (ou quelque chose du genre où un identifiant supplémentaire est ajouté aux demandes) ou 2. Collez simplement sur la portée de la portée / l'application apatride.


1 commentaires

OK, j'ai créé une application de test avec Mojarra 2.1.3 (Glassfish 3.1.1) et a découvert que le javax.faces.bean.viewscoped crée une vue séparée par onglet. Peut-être que ce n'était pas le cas dans le passé ou avec d'autres implémentations comme des myfaces? Quoi qu'il en soit, on dirait que l'utilisation de ciexcopes pour plusieurs onglets est géniale! TOW BAD CDI ne prend pas en charge une vue sur la vue ci-dessus et vous devez créer votre propre couture ou utiliser la couture!