Comment intégrer les résultats de api RESTful avec JSF?
Comment passer des résultats de service RESTful de composants JSF? J'ai lu beaucoup de posts, mais ne pouvais pas trouver une méthode simple. À l'aide de RESTful Api dans la mesure du possible est l'exigence principale pour mon application. La Performance est également clé, comme des milliers d'éléments de données seront traitées en une journée. Si je ne peux pas trouver une solution dans la JSF, je pourrais avoir à passer à une autre technologie.
Par conséquent, je demande au cas où je suis absent quelque chose de complètement à partir d'autres offres depuis que je suis nouveau. Voici un couple de scénarios simples.
Sur une page JSF, il y a une datatable (Primefaces Case à cocher en fonction de la sélection). La datatable affiche les dossiers disponibles (jusqu'à plusieurs milliers). La datatable doit être chargé par le biais d'une api RESTful à la volée. Ci-dessous le code de mon datatable.
<p:dataTable id="addSampleTable" var="sample" value="#{testBean.sampleDataModel}"
selection="#{testBean.selectedSamples}" >
<p:column selectionMode="multiple" style="width:2%" />
<p:column headerText="Sample">
<h:outputText value="#{sample.name}" />
</p:column>
</p:dataTable>
Quelle est la meilleure façon de charger les données? Est-il un souci de performances si chaque fois que je dois appeler l'API côté serveur (par opposition à côté client à l'aide de jquery et html)?
Deuxième scénario, sur la même page, il y a aussi un bouton qui permet à l'utilisateur d'ajouter un nouvel enregistrement à travers une autre api RESTful. À son tour, le nouveau record devrait être affiché dans la datatable.
Après que j'appel de l'API RESTful pour insérer un enregistrement, l'api renvoie également le dossier qui a été créé. Comment puis-je insérer ce nouvel enregistrement dans mon datamodel #{testBean.sampleDataModel} de sorte que je n'ai pas à charger l'intégralité de la table à nouveau? Je suppose que je peux remplacer ce datatable avec html et ajouter le nouvel enregistrement à la table à l'aide de jQuery, mais je ne peux pas exploiter le tableau de sélection de JSF.
Quelles sont mes options?
Vous devez vous connecter pour publier un commentaire.
Votre question semble être trop large, cependant j'essaie de donner quelques réponses.
Vous pouvez utiliser le modèle mis en œuvre par NetBeans' les gars. Si vous utilisez cette IDE, il y a une option pour Construire automatiquement des services web RESTful à partir de la base de données. Essentiellement, ce modèle créer tous les DAO des fonctionnalités de base dans un résumé à la classe générique appelé
AbstractFacade
. Ensuite, pour chaque béton classe d'Entité présente dans votre JPA représentation, il crée un Apatrides de classe étendantAbstractFacade
, et ajoute jax-rs annotations afin de le laisser exposer l'Entité de la classe par le biais de services web RESTful.Vous pouvez ensuite accéder aux services directement par EJB injection. Suffit d'utiliser @EJB annotation afin d'injecter votre service dans n'importe quel conteneur géré par la classe (dans la même application, mais aussi dans d'autres applications que vous utilisez le portable règles de nommage JNDI). En particulier, vous serez intéressé par l'injection de la façade classes dans la gestion des haricots sauvegarde de votre facelets composants.
Car vous avez besoin pour afficher les milliers de dossiers, votre meilleur pari est d'utiliser Primefaces' chargement paresseux dans votre datatable. Votre demande sera alors appeler la db uniquement pour récupérer les quelques dizaines d'enregistrements affichés dans la page en cours. Absolument éviter d'afficher plus de ces documents, sinon le navigateur client sera susceptible d'être négativement impactée.
Veuillez distinguer entre chargement à partir de la db et chargement en jsf. Vous pouvez programmer votre backing bean pour appeler la db (ce qui est généralement le plus cher de l'opération) uniquement lorsque vous pensez que c'est nécessaire. Autant que je sache, les deux JSF et PrimeFaces' dataTable implémentations ne vous donnent pas la possibilité de gérer le contenu de la table au niveau de ligne: à chaque mise à jour ajax, l'ensemble de la table sera rechargé. Toutefois, comme déjà dit, ce ne sera pas un impact sur votre demande des représentations, aussi longtemps que vous avez correctement programmé le backing bean (c'est à dire choisir le bon haricot portée et éviter d'appeler la db de service dans les getters).
Liens Utiles:
Bien que cette question est un peu vieux, c'est toujours une question d'actualité. Je ne suis pas heureux avec le anwsers ci-dessus, car les deux technologies mentionnées ci-dessus sont ensemble un missmatch.
La question la plus importante ici est: est-ce la donnée API RESTful en fait agir comme un ...
Dans le second cas, vous pouvez mettre en œuvre votre couche de service d'une technologie de votre choix, JSF adossés à des haricots ou même les Ejb sont un bon choix. Dans Java EE contexte de JAX-RS spécification est un bon choix, Jersey est une implémentation de cette spécification. Vous pouvez utiliser cette API du client pour accéder à l'API RESTful de Java: [1]
Mais...
Lors de la conception d'une nouvelle application, assurez-vous de votre api RESTful fournit pas seulement les opérations CRUD mais aussi de fournir plus leven de la couche de service des opérations (accessible en https méthode POST) et de traiter avec les problèmes de sécurité.
Dans ce cas des systèmes hétérogènes comme les applications mobiles, applications web, applications mobiles natives, et ainsi de suite, peuvent accéder à la couche de service directement et le point de vue particulier (le RESTE du service consommateur) est faiblement couplés avec la couche de service (ce qui est une bonne chose en génie logiciel, en général).
Mon avis: oubliez l'ancienne serveur web côté de cadres comme JSF, Struts et ainsi de suite, de fournir une API RESTful avec la couche de service des opérations et de l'utilisation de frameworks JavaScript tels que AngularJS pour accéder à l'Reposant directement... applications mobiles sont la prochaine étape. Le complet Java EE de la technologie de la pile est un peu rouillé 😉
[1] https://jersey.java.net/documentation/latest/user-guide.html#client
Oui, il y a un souci de performances. La meilleure façon est de charger votre collection, à la fois dans le contexte de la page et de la faire fonctionner sur la liste dans ce contexte. Ensuite, une fois que vous avez fait toutes les modifications que vous synchronisez avec le apatrides service REST.
Non, vous n'avez pas à le faire! Il y a plusieurs JSF datatable implémentations qui utilisent AJAX partielle soumettre, le datatable code comprend déjà la logique que vous décrivez ci-dessus. Votre collection en page champ d'application est étendu avec le nouvel élément sans nouveau rendu l'ensemble de la liste.