2011-04-27 4 views
1

Nous avons une application Java EE énorme (de nombreuses vues différentes) dont la couche Web transmet le contenu DHTML au navigateur pour générer la vue actuelle.Pages Web dynamiques avec JSF

Nous utilisons un framework JavaScript AJAX personnalisé pour gérer les événements de composants standardisés sur la vue. Le framework est chargé par un modèle de page initial qui hébergera toutes les différentes vues en cours.

Nous avons construit un outil pour les "non programmeurs" qui est utilisé pour définir une vue web en termes de disposition, d'événements et de fonctions connexes. Une fois la vue définie, DHTML est créé et stocké par programme dans la base de données. La requête de l'utilisateur (AJAX) pour une vue est gérée par un objet action qui extrait le contenu DHTML de la base de données et l'envoie au navigateur, où il sera rendu dans le modèle ou dans une fenêtre modale.

Pour diverses raisons, nous prévoyons de supprimer le framework Javascript et de déplacer la gestion des événements de vue vers le serveur. En recherchant un framework Java réalisable, nous avons étudié JSF qui semble avoir toutes les fonctionnalités dont nous avons besoin, à l'exception de celle pour créer la vue à la volée comme décrit précédemment. Avons-nous oublié une fonctionnalité JSF ou une solution de contournement? Sinon, connaissez-vous d'autres cadres similaires que nous pouvons adapter à nos besoins?

Répondre

2

Vous pouvez certainement créer une vue dynamiquement dans JSF. Sans le savoir plus de détails sur ce que vous construisez, je ne peux pas proscris une meilleure approche, mais voici quelques façons de construire une vue à la volée:

  • utiliser une interface: inclure un attribut src lié à une propriété de bean géré
  • utiliser un mélange de ui: inclure et JSTL

Cela peut devenir difficile parfois parce que quand vous mélangez JSTL avec des balises JSF, vous devez savoir où dans le rendu du cycle de vie de chaque type de balise exécuter pour le faire faire ce que vous voulez, mais une fois que vous l'avez appris, c'est l'approche la plus simple.

  • se lient à un composant d'un champ sur le bean géré et le manipuler côté serveur

I a cette approche pour générer dynamiquement des formulaires dans une application. Les formulaires changeraient en fonction du type de rapport, du type d'utilisateur et d'un très grand nombre d'autres critères. J'ai simplement lié un composant JSF de grille de panneau à un champ du côté du serveur, puis j'ai commencé à créer les éléments enfants manuellement (par exemple: UISelectOne dropdown = new UISelectOne();), en les ajoutant comme enfants à la grille du panneau (ex: panelgrid.getChildren(). add (dropdown);) comme je suis allé le long.

Il ne doit pas nécessairement s'agir d'une grille de panneaux, bien entendu, il pourrait s'agir d'un contrôle PrimeFaces Layout, dans lequel vous générez dynamiquement les enfants layoutUnit. Le fait est que tout contrôle peut être lié à une variable dans un bean géré, et vous pouvez le manipuler côté serveur en fonction des critères que vous voulez.