IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

[JSF/Spring] IoC pour les converters


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de eracius
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut [JSF/Spring] IoC pour les converters
    Bonjour,

    Je travaille actuellement sur un projet Spring+JSF. J'utilise des beans Spring comme managed beans JSF sans problème grâce à SpringBeanFacesELResolver mais impossible de faire pareil avec les converters (et à priori avec les validators mais je ne m'y suis pas encore attaqué)

    J'ai essayé de plusieurs façons :

    1ère façon : En incluant mon converter comme bean spring dans mon applicationContext.xml et en l'utilisant directement dans ma page JSF, comme je le fais pour les managed bean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <h:outputText value="Object" />
         <h:selectOneMenu id="selectObject" value="#{monManagedBean.object}">
    	<f:selectItems value="#{monManagedBean.ObjectList}" />
    	<f:converter converterId="#{monConverter}"/>
         </h:selectOneMenu>	
    <h:message for="selectObject" />
    J'obtiens l'erreur suivante au chargement du formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.faces.FacesException: Erreur dans lexpression: Object nommé util.jsf.converters.MonConverter@183eeb0 ne peut tre trouvé.
    2ème façon : Je tente de déclarer le converter dans faces-config pour lui spécifier mon bean service Spring :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            <converter>
    		<converter-id>monConverter</converter-id>
    		<converter-class>util.jsf.converters.MonConverter</converter-class>
    		<property> 
    	           <property-name>monServiceManager</property-name>
    	           <value>#{monServiceManager}</value> 
    	        </property>		
    	</converter>
    le formulaire se charge bien mais quand j'envoie les données, monServiceManager n'est pas instancié et le converter me renvoie donc une NullPointerException.

    Après pas mal de recherche, le problème semble assez commun et je n'ai pas trouvé de solutions, hormis cette solution "maison" mais qui est hélas un peu ancienne et qui utilise des classes dépréciées.

    Est-ce que quelqu'un ici a déjà réussi à faire cela ?

    Je trouve quand même bizarre que ça fonctionne pour les managed bean et pas pour les converters. Il parait assez évident que si l'on utilise l'IoC pour les managed bean, on pourrait être amené à l'utiliser aussi pour les converters.

    A moins que je sois passé à côté de quelque chose.

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    dans le converter tu peux initialiser ton service bean:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
     
    ServiceBean = (ServiceBean) ctx.getBean(bean);
    sinon j'ai lu quelque part comment garder le context spring dans la vue, je ne trouve plus le lien..

  3. #3
    Membre confirmé Avatar de eracius
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut
    Oui j'y ai pensé mais c'est un peu sale ... disons que je préfèrerai quelque chose de transparent comme SpringBeanFacesELResolver pour les managed beans.

    A la rigueur, ça peut me servir le temps de trouver mieux, je vais tester.

    Merci pour ta réponse.

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    voilà je pense que cela est intéressant FAQ SPRING

  5. #5
    Membre confirmé Avatar de eracius
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut
    Oui c'est ce que j'explique, ça marche avec les managed beans mais pas avec les converters

  6. #6
    Membre confirmé Avatar de eracius
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut
    Ok je viens de comprendre que j'avais mal compris l'utilité des converter JSF. J'avais lu en travers un mauvais tutorial.

    Bref. Du coup, je ne vois plus l'utilité d'utiliser un service bean dans un converter et c'est surement pour ça que ce n'est pas prévu.

  7. #7
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    dans le converter tu peux initialiser ton service bean:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
     
    ServiceBean = (ServiceBean) ctx.getBean(bean);
    sinon j'ai lu quelque part comment garder le context spring dans la vue, je ne trouve plus le lien..
    Citation Envoyé par eracius Voir le message
    Oui j'y ai pensé mais c'est un peu sale ... disons que je préfèrerai quelque chose de transparent comme SpringBeanFacesELResolver pour les managed beans.

    A la rigueur, ça peut me servir le temps de trouver mieux, je vais tester.

    Merci pour ta réponse.
    En effet, c'est plus que sale : c'est dangeureux même car tu auras plusieurs applications contexts séparés (avec ce que ça implique comme consommations mémoire), et des instances différentes dans le converter et dans les manged beans (bonjour les dégats).

    Sinon, comme solution, tu pourrais procéder comme décrit dans cette QR de la JSF : http://java.developpez.com/faq/jsf/?...ION_converter2

    Il suffit donc de déclarer ton converter dans l'applicationContext, de lui injecter les dépendances que tu veux, puis de l'injecter dans un maanged bean.

Discussions similaires

  1. Quel(s) sujet(s) pour les tutoriaux Spring
    Par mlny84 dans le forum Spring
    Réponses: 8
    Dernier message: 25/04/2014, 15h51
  2. un editeur de texte pour les textareas JSF?
    Par tirisus dans le forum JSF
    Réponses: 5
    Dernier message: 16/04/2009, 11h36
  3. jsf et Droit d'Accès pour les utilisateur
    Par pourjava dans le forum JSF
    Réponses: 1
    Dernier message: 20/07/2007, 14h42
  4. qu'est ce il faux aprendre pour les jsf?
    Par developper2006 dans le forum JSF
    Réponses: 1
    Dernier message: 05/03/2007, 22h55
  5. Réponses: 4
    Dernier message: 10/09/2006, 10h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo