FAQ SpringConsultez toutes les FAQ

Nombre d'auteurs : 5, nombre de questions : 41, dernière mise à jour : 24 avril 2008  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.


Sommaire Developpement Web (3)
précédent sommaire suivant
 

Dans une application Web, il n'est pas utile de créer l'ApplicationContext à la main via une des implémentations de cette interface.
En effet, Spring fournit un Listener afin de gérer cela :

Code xml : Sélectionner tout
1
2
3
4
5
<listener> 
    <listener-class> 
        org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
</listener>
Par défaut, ce Listener va charger un fichier /WEB-INF/applicationContext.xml, et stocker l'ApplicationContext dans le ServletContext.
Il est possible de spécifier un ou plusieurs fichiers à charger à la place du fichier par défaut. Pour cela, il faut utiliser un paramètre de contexte :

Code xml : Sélectionner tout
1
2
3
4
5
<context-param> 
    <param-name>contextConfigLocation</param-name> 
        <!-- Chargement de tout fichier xml commençant par applicationContext --> 
    <param-value>/WEB-INF/applicationContext*.xml</param-value> 
</context-param>
Ensuite, dans les servlets (ou toute autre classe possédant une référence au ServletContext), il est possible de récupérer l'applicationContext via :

Code java : Sélectionner tout
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

Mis à jour le 31 août 2007 Hikage

Une fois qu'un context Spring a été créé dans l'application Web, il est possible d'injecter un Bean Spring dans une Bean JSF. Pour ce faire, il faut tout d'abord ajouter un variable-resolver dans le faces-config.xml :

Code xml : Sélectionner tout
1
2
3
4
5
faces-config> 
  <application> 
    <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver> 
    </application> 
</faces-config>
Une fois cela fait, il est possible de lier un Bean Spring comme une propriété du Bean JSF :

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
<managed-bean> 
  <managed-bean-name>monBeanJSF</managed-bean-name> 
	<managed-bean-class>com.developpez.spring.jsf.MonBeanJSF</managed-bean-class> 
  <managed-bean-scope>request</managed-bean-scope> 
  <managed-property> 
    <property-name>userService</property-name> 
    <value>#{userService}</value> 
  </managed-property> 
</managed-bean>
Dans cet exemple, #{userService} fait référence à un Bean défini dans Spring, avec le nom userService.

Méthode Spring 2.5 Spring 2.5 offre enfin une nouvelle méthode d'intégration avec JSF compatible avec la version 1.2 (qui ne repose pas sur le VariableResolver, déprécié depuis JSF 1.2).
Pour cela, il faut ajouter dans faces-config ce fragment xml :

Code java : Sélectionner tout
1
2
3
4
<application>  
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver  
  </el-resolver>  
</application>
Le reste fonctionne exactement de la même façon qu'avec le DelegatingVariableResolver.

Mis à jour le 6 août 2007 djo.mos Hikage

Lors de l'utilisation d'Hibernate dans une application Web, il est courant d'avoir des problèmes lors de l'utilisation des objets Hibernate dans une vue (JSP, Velocity ou autres). La cause de cela est la stratégie par défaut de Hibernate, qui ne charge pas toutes les relations d'une entité automatiquement, mais seulement lorsqu'on tente réellement de les utiliser.

Le problème est qu'il est nécessaire d'avoir une Session hibernate ouverte, et qu'habituellement, celle-ci est fermée dans la couche service.

Pour résoudre le problème, si la SessionFactory est configurée dans un fichier de contexte Spring, un filtre est à notre disposition pour garder la session ouverte : OpenSessionInViewFilter.
Il suffit donc de l'ajouter dans le fichier web.xml :

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
<filter> 
	<filter-name>Hibernate Session In View Filter</filter-name> 
       <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> 
</filter> 
<filter-mapping> 
	<filter-name>Hibernate Session In View Filter</filter-name> 
	<url-pattern>/*</url-pattern> 
</filter-mapping>

Mis à jour le 24 avril 2008 michaelcourcy

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsables bénévoles de la rubrique Spring : Mickael Baron - Robin56 -