J'implémente actuellement un petit Spring MVC PoC, et j'aimerais utiliser JSF comme technologie d'affichage car la plupart des gens de mon entreprise sont habitués à un environnement J2EE avec Primefaces.
Spring MVC 3 prend-il en charge JSF ou simplement JSP? J'ai lu plusieurs articles mélangeant les deux.
Mon besoin est de créer une interface utilisateur attrayante. Existe-t-il un moyen simple de le faire en utilisant Spring MVC avec la JSP comme technologie d'affichage?
Notre application utilise des horaires/calendriers sur plusieurs pages. C'est essentiellement une application de gestion du temps
Vous faites une erreur conceptuelle. JSF n'est pas une technologie de vue. JSF est un framework MVC. Exactement comme Spring MVC, bien qu'ils aient tous deux une idéologie différente; JSF est MVC basé sur les composants et Spring MVC est MVC basé sur les requêtes. Ce sont donc des concurrents à part entière. Vous ne pouvez pas les mélanger. Vous devez choisir l'un ou l'autre. Au lieu de cela, JSP et Facelets sont de véritables technologies d'affichage. Depuis Java EE 6 (décembre 2009), JSP est obsolète et remplacé par Facelets (XHTML) comme technologie d'affichage par défaut pour JSF.
Vous pouvez utiliser Spring MVC avec technologie de vue JSP . Vous pouvez également utiliser Spring MVC avec technologie de vue Facelets (et beaucoup d'autres ). Mais vous ne pouvez pas utiliser Spring MVC avec des composants JSF et encore moins avec des bibliothèques de composants JSF comme PrimeFaces. Les composants de sortie JSF peuvent fonctionner, mais les composants d'entrée JSF ne fonctionneront pas du tout. Spring MVC a déjà ses propres balises <form:xxx>
Pour la saisie. Même si vous les mélangez, vous vous retrouverez avec la moitié des fonctionnalités des deux cadres dans une base de code mélangée et déroutante. Cela n'a aucun sens. Si tout ce que vous voulez est d'utiliser la même interface utilisateur que PrimeFaces, saisissez simplement jQuery UI . C'est aussi exactement ce que PrimeFaces utilise sous les couvertures. PrimeFaces est une bibliothèque de composants JSF basée sur jQuery.
De l'autre côté, il peut également être très bon que vous confondiez Spring IoC/DI avec Spring MVC. Spring IoC/DI est à son tour tilisable avec JSF. Vous pouvez remplacer l'installation de bean géré par JSF (@ManagedBean
Et amis) par l'installation de bean gérée par Spring (@Component
Et amis), généralement dans le seul but d'utiliser @Autowired
Dans un bean de sauvegarde JSF. Mais c'est tout. Le cycle de vie du framework JSF MVC, les composants JSF et la technologie de visualisation restent inchangés. L'équivalent standard Java EE de cela utiliserait CDI (et EJB ).
La même histoire s'applique à Spring Security. Vous pouvez l'utiliser avec JSF, vous ne devez cependant pas suivre la documentation/les exemples ciblés de Spring Security + Spring MVC pour le configurer, mais uniquement ceux de Spring Security + JSF. Notez que les contraintes de sécurité de Spring sur les actions métier ne fonctionnent que lorsque vous remplacez la fonction de bean géré JSF par la fonction de bean géré par Spring. Cela nécessiterait donc toujours un "ressort intégré dans JSF" comme décrit dans le paragraphe précédent. L'équivalent standard Java EE de tout cela utiliserait sécurité gérée par conteneur (JAAS/JASPIC) via les entrées <security-constraint>
Dans web.xml
.
La même histoire s'applique également à Spring WebFlow. Vous devez également vous assurer que vous utilisez la version la plus récente de Spring WebFlow car les anciennes versions provoquent conflits lorsqu'elles sont utilisées avec plusieurs bibliothèques de composants JSF. De plus, depuis JSF 2.2, la nouvelle fonctionnalité Faces Flows a été introduite dans le cadre de l'API standard Java EE, rendant ainsi Spring WebFlow superflu.
Ensuite, il y a Spring Boot. Cela n'a pas d'équivalent direct dans Java EE. Spring Boot vous permet essentiellement d'exécuter une application Java EE en utilisant une classe d'application Java simple avec une méthode main()
"de manière simple et abstraite". Sans Spring Boot, c'est sûrement possible (sinon Spring Boot n'aurait jamais existé), c'est juste un peu plus de travail de configuration car vous devez prendre en compte les détails spécifiques au serveur sur la base de sa documentation. Par exemple: ndertow et Jetty .
En revenant à JSF et Spring MVC, si vraiment nécessaire, vous pouvez exécuter Spring MVC et JSF côte à côte en toute sécurité dans la même application Web, mais ils n'interagiront pas côté serveur. Ils fonctionneront de manière totalement indépendante. Ils se toucheront tout au plus du côté client, si du JavaScript dans une page HTML générée par JSF arrive à appeler un appel de service Web REST basé sur Spring dans la même application Web. Mais ce service Web Spring n'aurait alors plus besoin de rien savoir sur JSF pour répondre en conséquence. L'équivalent standard Java EE de ce service Web Spring REST est JAX-RS .
Le prochain Java EE 8 sera livré avec un nouveau framework MVC basé sur les requêtes, nommé simplement " MVC ", basé sur les leçons des deux JSF et Spring MVC, remplaçant ainsi Spring MVC et fournissant une alternative standard à JSF.
Spring MVC et JSF ne se mélangent pas vraiment. Vous pouvez utiliser JSF pour les éléments liés à la vue et demander à Spring de gérer et de câbler le support (services, daos, etc.). Mais essayer de faire correspondre @Controllers avec des pages JSF n'est pas quelque chose qui fonctionne vraiment bien (à côté de cela, les deux sont des demandes de piles différentes basées sur des composants).
Pour intégrer Spring à JSF, vous devrez ajouter le SpringBeanFacesELResolver
à votre faces-config.xml. Cela recherchera des beans à partir du contexte de l'application Springs. Pour que cela fonctionne, vous devez utiliser des annotations JSF simples et non les annotations basées sur CDI.
Spring Webflow peut être une aide ici. Découvrez cet exemple de projet. https://github.com/spring-projects/spring-webflow-samples/tree/master/primefaces-showcase