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 :

Sauvegarde contenu formulaire JSF dans la BDD


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 201
    Par défaut Sauvegarde contenu formulaire JSF dans la BDD
    Bonjour,

    J'ai effectué une formation JSF où l'on utilisait spring et hibernate en même temps.

    Nous avions un bean Test tout simple de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public class Test {
     
        private int id;
        private String nom;
     
        public Test() {
            super();
        }
     
        public int getId() {
            return id;
        }
     
        public void setId(int id) {
            this.id = id;
        }
     
        public String getNom() {
            return nom;
        }
     
        public void setNom(String nom) {
            this.nom = nom;
        }
     
    }
    et un bean userFactory qui nous fournit les beans Test (via Spring) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public class UserFactory extends HibernateDaoSupport{
    	public Test getTest(int id) {
    		Test b = null;
            List users = getHibernateTemplate().find("from Test where id = ?", new Integer(id));
            if(users.size( ) > 0) {
                b = (Test)users.get(0);
            }
            return b;
        }
     
    	public List getTests() {
    		List tests = getHibernateTemplate().loadAll(Test.class);
    		return tests;
    	}
     
    	public void saveTest(Test test){
    		getHibernateTemplate().saveOrUpdate(test);
    	}
    }
    Le bean Test est mappé sur une base de donnée MySql grace à Hibernate.

    Pendant la formation nous avons donc affichés le contenu de notre table "Test" dans des pages jsf.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <h:outputText value="Hello"/> <h:outputText value="#{userFactory.tests}"/>
    <hr/>
    <h:outputText value="#{userFactory.tests[1].nom}"/>
    <hr/>
    <h:form>
    <h:dataTable value="#{userFactory.tests}" var="test">
    	<h:column>
    		<h:outputText value="#{test.id}" />
    	</h:column>
    	<h:column>
     
    		<h:inputText value="#{test.nom}"/>
    	</h:column>	
    </h:dataTable>
    </h:form>
    et à un moment donné, le formateur nous a montré comment sauvegarder les modifications apportées dans nos champs du formulaire directement dans la base de donnée, en utilisant la methode saveOrUpdate du TemplateHibernate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void saveTest(Test test){
    		getHibernateTemplate().saveOrUpdate(test);
    	}
    Le problème c'est que j'ai un cerveau de poisson rouge et que je ne m'en rappelle plus! Ce que je me souviens c'est que c'était vraiment pas compliqué du tout contrairement à ce que j'ai trouvé sur le net..

    Ce que j'aimerais faire c'est genre un bouton que quand je clique dessus il m'enregistre les modifs par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandButton action="#{userFactory.saveTest(userFactory.tests[1])}"/>
    Mais le problème vient au niveau du passage de paramètre de ma fonction saveTest, et j'ai un super méga trou de mémoire...

    Merci pour les éventuelles réponses.

    a+

    Laurent

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    tu as quoi de déclarer dans ton faces-config ca m étonnerait fortement que ton formateur vous ai dit de faire appel a ta factory (qui représente en fait un dao) pour accéder directement a ton objet

    et ton applicationContext il ressemble à quoi ?

    si tu as un managed bean de déclarer alors tu pourras faire appel à a la méthode suivante #{managedBean.saveOrUpdate} mais ca m étonne fortement que cela soit possible car je doute que tu aies définis correctement la datasource de ta factory

    dans ton managed bean tu créer une instance dans le constructeur de ton managedBean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    private UserFactory factory;
     
    public void setFactory(UserFactory factory) {
     this.factory = factory;
    }
     
    public UserFactory getFactory() {
     return this.factory;
    }
    public ManagedBean() {
      test= new Test()
    }
     
    public void saveOrUpdate() {
       this.factory.saveOrUpdate(test)
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 201
    Par défaut
    Mon faces-config xml est quasiment vide car on lui dit juste d'utiliser spring :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0"?>
    <!DOCTYPE faces-config PUBLIC
    "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
    "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
    <faces-config>
     
    	<application>
    		<variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
    	</application>
     
     
    </faces-config>
    J'ai ensuite mon fichier xml hibernate de mapping classique.

    Et voici mon applicationContext qui utilise la dataSource :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?xml version="1.0" encoding="UTF-8"?>
     
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
     
    <beans>
     
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    		<property name="driverClassName">
    			<value>org.gjt.mm.mysql.Driver</value>
    		</property>	
    		<property name="url">
    		<value>jdbc:mysql://localhost/foot</value>
    	    </property>
    	    <property name="username">
    	      <value>root</value>
    	    </property>
    	    <property name="password">
    	      <value></value>
    	    </property>
      </bean>
     
     
    <bean id="sessionFactory" 
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource"><ref local="dataSource"/></property>
        <property name="mappingResources">
               <list>
                       <value>/WEB-INF/test.hbm.xml</value>
               </list>
        </property>
        <property name="hibernateProperties">
               <props>
                      <prop key="hibernate.dialect">
                      org.hibernate.dialect.MySQLDialect
                      </prop>
                      <prop key="hibernate.show_sql">true</prop>
               </props>
        </property>
    </bean>
     
    <bean name="userFactory" class="com.sogeti.spring.hbm.UserFactory">
        <property name="sessionFactory">
              <ref local="sessionFactory"/>
        </property>
    </bean>
    </beans>
    On ne faisait jamais de Test t = NEW test() car c'est spring qui s'en charge.

Discussions similaires

  1. Sauvegarder un formulaire JSF avec JDBC
    Par stoner2008 dans le forum JSF
    Réponses: 15
    Dernier message: 26/08/2013, 12h00
  2. [Conception] Pb d insertion dans une BDD des données d un formulaire
    Par xtiand4 dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 02/06/2006, 18h18
  3. Sauvegarder dans une bdd
    Par gaetan.tranvouez dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 01/06/2006, 12h09
  4. [Type de données]Comment sauvegarder fichiers dans une bdd?
    Par splinternabs dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 06/04/2006, 15h14
  5. Réponses: 5
    Dernier message: 31/01/2006, 14h54

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