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

JDBC Java Discussion :

Problème pour passer de MySQL à MariaDB


Sujet :

JDBC Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut Problème pour passer de MySQL à MariaDB
    Bonjour,

    J'ai créé mon application JEE avec Spring, Struts II et Hibernate sur un autre ordinateur qui tournait sous windows avec XAMPP et MySQL.
    Maintenant, je suis sous Linx Mint qui utilise LAMPP et MariaDB.

    La persistence de l'objet Client fonctionnait bien avec MySQL mais maintenant que je suis avec MariaDB, je rencontre un problème lors de certaines persistences.

    Pour l'instant, au stade d'avancement de mon appli, je persiste l'objet Client.

    Mon appli charge bien la liste de tous les clients que j'ai créés en base de donnée mais il m'est impossible de créer ou de modifier des clients existants alors que cela fonctionnait sous MySQL.

    Voici la console d'Eclipse lorsque je lance mon appli.
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    juil. 17, 2016 12:06:14 AM org.apache.catalina.startup.Catalina load
    INFOS: Initialization processed in 774 ms
    juil. 17, 2016 12:06:14 AM org.apache.catalina.core.StandardService startInternal
    INFOS: Démarrage du service Catalina
    juil. 17, 2016 12:06:14 AM org.apache.catalina.core.StandardEngine startInternal
    INFOS: Starting Servlet Engine: Apache Tomcat/8.0.36
    juil. 17, 2016 12:06:17 AM org.apache.jasper.servlet.TldScanner scanJars
    INFOS: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
    juil. 17, 2016 12:06:17 AM org.apache.catalina.core.ApplicationContext log
    INFOS: No Spring WebApplicationInitializer types detected on classpath
    juil. 17, 2016 12:06:17 AM org.apache.catalina.core.ApplicationContext log
    INFOS: Initializing Spring root WebApplicationContext
    juil. 17, 2016 12:06:17 AM org.springframework.web.context.ContextLoader initWebApplicationContext
    INFOS: Root WebApplicationContext: initialization started
    juil. 17, 2016 12:06:17 AM org.springframework.web.context.support.XmlWebApplicationContext prepareRefresh
    INFOS: Refreshing Root WebApplicationContext: startup date [Sun Jul 17 00:06:17 CEST 2016]; root of context hierarchy
    juil. 17, 2016 12:06:18 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    INFOS: Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext.xml]
    juil. 17, 2016 12:06:18 AM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
    INFOS: Loaded JDBC driver: org.mariadb.jdbc.Driver
    juil. 17, 2016 12:06:18 AM org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean createNativeEntityManagerFactory
    INFOS: Building JPA container EntityManagerFactory for persistence unit 'mainunit'
    juil. 17, 2016 12:06:18 AM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
    INFO: HHH000204: Processing PersistenceUnitInfo [
    	name: mainunit
    	...]
    juil. 17, 2016 12:06:18 AM org.hibernate.Version logVersion
    INFO: HHH000412: Hibernate Core {4.3.10.Final}
    juil. 17, 2016 12:06:18 AM org.hibernate.cfg.Environment <clinit>
    INFO: HHH000206: hibernate.properties not found
    juil. 17, 2016 12:06:18 AM org.hibernate.cfg.Environment buildBytecodeProvider
    INFO: HHH000021: Bytecode provider name : javassist
    juil. 17, 2016 12:06:19 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
    INFO: HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
    juil. 17, 2016 12:06:19 AM org.hibernate.dialect.Dialect <init>
    INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
    juil. 17, 2016 12:06:19 AM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
    INFO: HHH000397: Using ASTQueryTranslatorFactory
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
    INFO: HHH000228: Running hbm2ddl schema update
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
    INFO: HHH000102: Fetching database metadata
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
    INFO: HHH000396: Updating schema
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000261: Table found: base_commandes.Client
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000037: Columns: [prenom, typevoie, numerovoie, codepostal, email, nomvoie, ville, idclient, nom]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000108: Foreign keys: []
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000126: Indexes: [primary]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000261: Table found: base_commandes.Commande
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000037: Columns: [datecommande, isvalidated, idclient, prixtotal, idcommande]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000108: Foreign keys: [fk_irmwnt7a01qv9xhsuxvc7v16j]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000126: Indexes: [primary, fk_irmwnt7a01qv9xhsuxvc7v16j]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000261: Table found: base_commandes.Conditionnement
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000037: Columns: [id, quantite, designation]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000108: Foreign keys: []
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000126: Indexes: [primary]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000261: Table found: base_commandes.Erreurs
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000037: Columns: [message, clé, iderreur]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000108: Foreign keys: []
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000126: Indexes: [primary]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000261: Table found: base_commandes.LigneCommande
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000037: Columns: [prixligne, quantite, idproduitconditionne, idlignecommande, idcommande]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000108: Foreign keys: [fk_12fj6vhr17hdyh37ak9k97tcd, fk_dn3202hw9gg6oty8rc2gtjv1n]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000126: Indexes: [primary, fk_12fj6vhr17hdyh37ak9k97tcd, fk_dn3202hw9gg6oty8rc2gtjv1n]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000261: Table found: base_commandes.Produit
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000037: Columns: [id, stock, prix, designation]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000108: Foreign keys: []
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000126: Indexes: [primary]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000261: Table found: base_commandes.ProduitConditionne
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000037: Columns: [prixprodcond, idconditionnement, designation, idproduitconditionne, idproduit, encarte]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000108: Foreign keys: [fk_bceqi96945e0tn7dvol7drfqv, fk_50etk0c4dvqc867gkqfpi2w87]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>
    INFO: HHH000126: Indexes: [fk_bceqi96945e0tn7dvol7drfqv, primary, fk_50etk0c4dvqc867gkqfpi2w87]
    juil. 17, 2016 12:06:20 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
    INFO: HHH000232: Schema update complete
    2016-07-17 00:06:20,301 INFO  [localhost-startStop-1] dao.GenericDAO (GenericDAO.java:23) - Création GenericDAO
    2016-07-17 00:06:20,343 INFO  [localhost-startStop-1] dao.GenericDAO (GenericDAO.java:23) - Création GenericDAO
    Je vois que le driver de MariaDB est bien pris en compte, et que toutes les tables sont reconnues par Hibernate.

    Mais lorsque je créée un Client, il n'y a pas de persistence et d'ailleurs, je vois dans la console sur Eclipse que le service Save normalement appelé depuis ClientsAction.java n'est même pas appelé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    2016-07-17 00:06:22,782 INFO  [http-nio-8080-exec-2] actions.IndexAction (IndexAction.java:14) - Appel de index
    2016-07-17 00:06:22,874 INFO  [http-nio-8080-exec-3] actions.IndexAction (IndexAction.java:14) - Appel de index
    2016-07-17 00:08:21,531 INFO  [http-nio-8080-exec-5] actions.IndexAction (IndexAction.java:14) - Appel de index
    2016-07-17 00:08:21,942 INFO  [http-nio-8080-exec-6] actions.ClientsAction (ClientsAction.java:65) - ClientsAction - répertoire client
    2016-07-17 00:08:21,968 INFO  [http-nio-8080-exec-6] dao.GenericDAO (GenericDAO.java:30) - GenericDAO : findAll - from Client
    Hibernate: select client0_.idClient as idClient1_0_, client0_.codePostal as codePost2_0_, client0_.nomVoie as nomVoie3_0_, client0_.numeroVoie as numeroVo4_0_, client0_.typeVoie as typeVoie5_0_, client0_.ville as ville6_0_, client0_.email as email7_0_, client0_.nom as nom8_0_, client0_.prenom as prenom9_0_ from Client client0_
    Mais je ne comprends pas trop d'où cela peut-il venir !

    Je joins, mon ClientsAction.java
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    package com.chezyen.commandes.actions;
     
    import java.util.List;
    import java.util.Set;
     
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
     
    import com.chezyen.commandes.commons.Erreurs;
    import com.chezyen.commandes.dao.IClientDAO;
    import com.chezyen.commandes.metier.Adresse;
    import com.chezyen.commandes.metier.Client;
    import com.chezyen.commandes.metier.Commande;
    import com.opensymphony.xwork2.ActionSupport;
     
    public class ClientsAction extends ActionSupport {
     
    	private static final long serialVersionUID = 1L;
     
    	private static Logger log = LogManager.getLogger(ClientsAction.class);
     
    	private IClientDAO clientDAO;
    	public void setClientDAO(IClientDAO clientDAO) {this.clientDAO = clientDAO;}
    	public IClientDAO getClientDAO() {return clientDAO;}
     
    	private int clientID;
    	private String clientNom;
    	private String clientPrenom;
    	private String clientEmail;
    	private int clientCodePostal;
    	private String clientNomVoie;
    	private String clientTypeVoie;
    	private String clientNumeroVoie;
    	private String clientVille;
    	private Set<Commande> commandes;
     
    	public int getClientID() {return clientID;}
    	public void setClientID(int clientID) {this.clientID = clientID;}
    	public String getClientNom() {return clientNom;}
    	public void setClientNom(String clientNom) {this.clientNom = clientNom;}
    	public String getClientPrenom() {return clientPrenom;}
    	public void setClientPrenom(String clientPrenom) {this.clientPrenom = clientPrenom;}
    	public String getClientEmail() {return clientEmail;}
    	public void setClientEmail(String clientEmail) {this.clientEmail = clientEmail;}
    	public int getClientCodePostal() {return clientCodePostal;}
    	public void setClientCodePostal(int clientCodePostal) {this.clientCodePostal = clientCodePostal;}
    	public String getClientNomVoie() {return clientNomVoie;}
    	public void setClientNomVoie(String clientNomVoie) {this.clientNomVoie = clientNomVoie;}
    	public String getClientTypeVoie() {return clientTypeVoie;}
    	public void setClientTypeVoie(String clientTypeVoie) {this.clientTypeVoie = clientTypeVoie;}
    	public String getClientNumeroVoie() {return clientNumeroVoie;}
    	public void setClientNumeroVoie(String clientNumeroVoie) {this.clientNumeroVoie = clientNumeroVoie;}
    	public String getClientVille() {return clientVille;}
    	public void setClientVille(String clientVille) {this.clientVille = clientVille;}
    	public Set<Commande> getCommandes() {return commandes;}
    	public void setCommandes(Set<Commande> commandes) {this.commandes = commandes;}
     
    	private Client client;
    	public Client getClient() {return client;}
     
    	private List<Client> clients;
    	public List<Client> getClients() {return clients;}
     
    	public String repertoire() {		
    		log.info("ClientsAction - répertoire client");
    		this.clients = clientDAO.findAll();
    		return SUCCESS;
    	}
     
    	public String nouveauClient() {
    		log.info("nouveauClient - nom : " + getClientNom());
    		Adresse adresse = new Adresse(getClientNomVoie(), getClientTypeVoie(), getClientNumeroVoie(), getClientCodePostal(), getClientVille());
    		log.info("numero adresse : " + getClientNumeroVoie() + ", " + getClientTypeVoie() + " " + getClientNomVoie() + " " + getClientCodePostal() + " " + getClientVille());
    		Client client = new Client(getClientNom(), getClientPrenom(), getClientEmail(), adresse, null);
    		if(verificationNouveauClient(adresse, client)){
    			log.info("vérification OK");
    			this.client = getClientDAO().save(client);
    			return SUCCESS;
    		} else {
    			Erreurs err = new Erreurs("NewCliErr", "erreur nouveau client");
    			return ERROR;
    		}
    	}
     
    	private boolean verificationNouveauClient(Adresse adresse, Client client) {
    		this.clients = clientDAO.findAll();
    		for(Client cl : clients) {
    			if(adresse.getNomVoie().equals(cl.getAdresse().getNomVoie())){
    				log.info("Nom de voie identique trouvé. Nom : " + adresse.getNomVoie());
    				return false;
    			}
    		}
    		return true;
    	}
     
    	public String suppression() {
    		log.info("ClientsAction - suppression - clientID : " + getClientID());
    		this.client = clientDAO.findByID(getClientID());
    		log.info("ClientsAction - suppression - client nom : " + this.client.getNom());
    		return SUCCESS;
    	}
     
    	public String valider_suppression(){
    		log.info("ClientsAction - suppression - clientID : " + getClientID() + ", nom : " + getClientNom());
    		Client client = new Client();
    		client = getClientDAO().remove(getClientID());
    		this.clients = clientDAO.findAll();
    		return SUCCESS;
    	}
     
    	public String modification() {
    		log.info("ClientsAction - modification - clientID : " + getClientID());
    		this.client = clientDAO.findByID(getClientID());
    		log.info("ClientsAction - modification - client nom : " + this.client.getNom());
    		return SUCCESS;
    	}
     
    	public String valider_modification() {
    		log.info("ClientsAction - valider_modification");
    		Client client = new Client();
    		log.info("ClientsAction - valider_modification - client id : " + client.getIdClient() + "attr clientID : " + getClientID());
    		client = client.setClient(getClientID(),
    								getClientNom(), 
    								getClientPrenom(),
    								getClientEmail(),
    								getClientNomVoie(), 
    								getClientTypeVoie(), 
    								getClientNumeroVoie(), 
    								getClientCodePostal(), 
    								getClientVille());
    		log.info("ClientsAction - valider_modification - nomVoie : " + getClientNomVoie() + "id client : " + client.getIdClient());
    		this.client = clientDAO.save(client);
    		log.info("ClientsAction - save modified client - nom : " + this.clientNom + ", id : " + getClientID());
    		this.clients = clientDAO.findAll();
    		return SUCCESS;
    	}
    }
    le fichier struts.xml :
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
            "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
        <constant name="struts.devMode" value="true"/>
    	<constant name="struts.action.extension" value=","/>
        <constant name="struts.enable.SlashesInActionNames" value="true" />
     
        <package name="default" namespace="/" extends="json-default">
     
            <default-action-ref name="index"/>
     
            <action name="index" class="com.chezyen.commandes.actions.IndexAction" method="index" >
                <result name="success">/index.jsp</result>
            </action>
     
            <!-- Gestion des commandes -->
     
    		<action name="gestComm/produits" class="com.chezyen.commandes.actions.ProduitsAction" method="gestionCommandes">
    			<result name="success" type="json">
    				<param name="includeProperties">
    					^produits\[\d\]\.id$,
    					^produits\[\d\]\.designation$,
    					^produits\[\d\]\.prix$,
    					^produits\[\d\]\.stock
    				</param>
    			</result>
    		</action>
     
    		<action name="gestComm/produitSave" class="com.chezyen.commandes.actions.IndexAction" method="save">
    			<interceptor-ref name="defaultStack" />
    			<interceptor-ref name="json" />
    			<result name="success" type="json">
    				<param name="includeProperties">
    					^produit\.id$,
    					^produit\.designation$,
    					^produit\.prix$,
    					^produit\.stock$
    				</param>
    			</result>
    		</action>
     
    		<!-- gestion des clients -->
     
    		<action name="gestClients/nouveau" class="com.chezyen.commandes.actions.ClientsAction" method="nouveauClient">
    			<interceptor-ref name="defaultStack"/>
    			<interceptor-ref name="json"/>
    			<result name="success" type="json">
    				<param name="includeProperties">
    					^client\.idClient$,
    					^client\.nom$,
    					^client\.prenom$,
    					^client\.adresse\.numeroVoie$,
    					^client\.adresse\.typeVoie$,
    					^client\.adresse\.nomVoie$,
    					^client\.adresse\.codePostal$,
    					^client\.adresse\.ville$
    				</param>
    			</result>
    			<result name="error" type="json">
    				<param name="includeProperties">
    					^erreurs\.message$
    				</param>
    			</result>
    		</action>
     
    		<action name="gestClients/repertoire" class="com.chezyen.commandes.actions.ClientsAction" method="repertoire">
    			<result name="success" type="json">
    				<param name="includeProperties">
    					^clients\[\d\]\.idClient$,
    					^clients\[\d\]\.nom$,
    					^clients\[\d\]\.prenom$,
    					^clients\[\d\]\.adresse\.codePostal$,
    					^clients\[\d\]\.adresse\.ville$,
    					^clients\[\d\]\.adresse\.numeroVoie$,
    					^clients\[\d\]\.adresse\.typeVoie$,
    					^clients\[\d\]\.adresse\.nomVoie$
    				</param>
    			</result>
    		</action>
     
    		<action name="gestClients/supprimer" class="com.chezyen.commandes.actions.ClientsAction" method="suppression">
    			<interceptor-ref name="defaultStack"/>
    			<interceptor-ref name="json"/>
    			<result name="success" type="json">
    				<param name="includeProperties">
    					^client\.idClient$,
    					^client\.nom$,
    					^client\.prenom$,
    					^client\.adresse\.numeroVoie$,
    					^client\.adresse\.typeVoie$,
    					^client\.adresse\.nomVoie$,
    					^client\.adresse\.codePostal$,
    					^client\.adresse\.ville$
    				</param>
    			</result>
    		</action>
     
    		<action name="gestClients/valider_suppression" class="com.chezyen.commandes.actions.ClientsAction" method="valider_suppression">
    			<interceptor-ref name="defaultStack"/>
    			<interceptor-ref name="json"/>
    			<result name="success" type="json">
    				<param name="includeProperties">
    					^clients\[\d\]\.idClient$,
    					^clients\[\d\]\.nom$,
    					^clients\[\d\]\.prenom$,
    					^clients\[\d\]\.adresse\.codePostal$,
    					^clients\[\d\]\.adresse\.ville$,
    					^clients\[\d\]\.adresse\.numeroVoie$,
    					^clients\[\d\]\.adresse\.typeVoie$,
    					^clients\[\d\]\.adresse\.nomVoie$
    				</param>
    			</result>
    		</action>
     
    		<action name="gestClients/modifier" class="com.chezyen.commandes.actions.ClientsAction" method="modification">
    			<interceptor-ref name="defaultStack"/>
    			<interceptor-ref name="json"/>
    			<result name="success" type="json">
    				<param name="includeProperties">
    					^client\.idClient$,
    					^client\.nom$,
    					^client\.prenom$,
    					^client\.adresse\.numeroVoie$,
    					^client\.adresse\.typeVoie$,
    					^client\.adresse\.nomVoie$,
    					^client\.adresse\.codePostal$,
    					^client\.adresse\.ville$
    				</param>
    			</result>
    		</action>
     
    		<action name="gestClients/valider_modification" class="com.chezyen.commandes.actions.ClientsAction" method="valider_modification">
    			<interceptor-ref name="defaultStack"/>
    			<interceptor-ref name="json"/>
    			<result name="success" type="json">
    				<param name="includeProperties">
    					^clients\[\d\]\.idClient$,
    					^clients\[\d\]\.nom$,
    					^clients\[\d\]\.prenom$,
    					^clients\[\d\]\.adresse\.codePostal$,
    					^clients\[\d\]\.adresse\.ville$,
    					^clients\[\d\]\.adresse\.numeroVoie$,
    					^clients\[\d\]\.adresse\.typeVoie$,
    					^clients\[\d\]\.adresse\.nomVoie$
    				</param>
    			</result>
    		</action>		
     
        </package>
     
        <!-- Add addition packages and configuration here. -->
    </struts>
    la partie du fichier gestionClients.html qui me sert à saisir les données du nouveau client et à envoyer vers le fichier gestionClients.js :
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    <div class="container" ng-controller="clientCtrl">
    	<div id="firstRow" class="row">
    		<div class="col-sm-12" style="padding-right:30px;">
    <div id="nouveauClient" style="text-align:center;">
    	Créer un nouveau client
    </div>
    <div id="panelNouveauClient">
    	<div class="encadre" style="height:130px; min-width: 600px;">
                  <div style="text-align:center;">
                  	<label style="color:#c7b988;">Identité</label><br />
                  </div>
                  <div>
                  	<div id="tablesInlineBlock" style="width:49%;">
                  		<div id="tablesBlock">
                  			<label>Nom</label>
                 			</div>
                  		<div id="tablesBlock" style="min-width: 270px;">
                  			<input id="nouveauClientNom" type="text" class="form-control" ng-model="client_nom" style="width:200px;"/>
                 			</div>
                  	</div>
                  	<div id="tablesInlineBlock" style="width:50%;">
                  		<div  id="tablesBlock">
                  			<label>Prénom</label>
                  		</div>
                  		<div id="tablesBlock" style="min-width: 250px;">
                  			<input type="text" class="form-control"  ng-model="client_prenom" style="width:200px;"/>
                 			</div>
                  	</div>
                  </div>
                 </div>
                 <div class="encadre" style="min-width: 600px;">
                  <div style="text-align:center;">
                  	<label style="color:#c7b988;">Adresse</label><br />
                  </div>
                  <div>
                  	<div id="tablesInlineBlock" style="width:24%;">
                  		<div id="tablesBlock">
                  			<label>Numéro</label>
                 			</div>
                  		<div id="tablesBlock" style="min-width: 60px;">
                  			<input id="numVoie" type="text" class="form-control"  ng-model="client_numVoie" maxlength="8" style="width:110px;"/>
                 			</div>
                  	</div>
                  	<div id="tablesInlineBlock" style="width:30%;">
                  		<div id="tablesBlock">
                  			<label>Voie</label>
                 			</div>
                  		<div id="tablesBlock" style="min-width: 170px;">
                  			<select id="typeVoie" class="form-control" ng-model="client_typeVoie" style="width:150px;">
    	                	<option>Impasse</option>
    	                	<option>Route</option>
    	                	<option selected="selected">Rue</option>
    	                	<option>Autre</option>
    	                </select>
                 			</div>
                  	</div>
                  	<div id="tablesInlineBlock" style="width:45%;">
                  		<div  id="tablesBlock">
                  			<label>Nom voie</label>
                  		</div>
                  		<div id="tablesBlock" style="min-width: 250px;">
                  			<input id="nomVoie" type="text" class="form-control" ng-model="client_nomVoie"/>
                 			</div>
                  	</div>
                  </div>
                  <div>
                  	<div id="tablesInlineBlock" style="width:49%;">
                  		<div id="tablesBlock">
                  			<label>Code postal</label>
                 			</div>
                  		<div id="tablesBlock" style="min-width: 90px;">
                  			<input id="codePostal" type="text" class="form-control" ng-model="client_codePostal" maxlength="5" style="width:110px;"/>
                 			</div>
                  	</div>
                  	<div id="tablesInlineBlock" style="width:50%;">
                  		<div  id="tablesBlock">
                  			<label>Ville</label>
                  		</div>
                  		<div id="tablesBlock" style="min-width: 290px;">
                  			<input id="ville" type="text" class="form-control" ng-model="client_ville" style="width:250px;"/>
                 			</div>
                  	</div>
                  </div>
                 </div>
                 <span class="input-group-btn">
                     <button class="btn btn-default"
                             ng-click="nouveau_client(client_nom, client_prenom, client_numVoie, client_typeVoie, client_nomVoie, client_codePostal, client_ville);">
                             Ajouter client
                     </button>
                 </span>
    </div>
    Le fichier getion_client.js :
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
     
    // cette ligne crée un nouveau module angular
    // le tableau en deuxieme argument contient les
    // dépendances a injecter dans ce module
    var chezYenApp = angular.module("chezYenApp", []);
     
    // Création d'un controlleur "StoreCtrl" dans notre module
    // le scope est automatiquement injecté par angular
    chezYenApp.controller("clientCtrl", function($scope, $http) {
       $scope.clients = [];
       $scope.clientModif;
     
       $http.get('../gestClients/repertoire').then(function (response) {
           $scope.clients = response.data.clients;
       });
     
       $scope.nouveau_client = function(nom, prenom, email, numVoie, typeVoie, nomVoie, codePostal, ville){
     
    	   console.log("nouveauClient nom : " + nom);
    	   $http.post('../gestClients/nouveau', {
    		   	"clientNom": nom,
    		   	"clientPrenom": prenom,
    		   	"clientEmail": email,
    		   	"clientNumeroVoie": numVoie,
    		   	"clientTypeVoie": typeVoie,
    		   	"clientNomVoie": nomVoie,
    		   	"clientCodePostal": codePostal,
    		   	"clientVille": ville
    		   }).success(function(response) {
    			   $('#nouveauClientNom').attr('value', '');
    			   $("#panelNouveauClient").slideToggle(600);
    			   //the following line must be tried 
    			   //$scope.$apply();
    			   $scope.clients.push(response.client);
    		   }).error(function(response){
    			   $scope.erreurs.push(response.erreurs);
    		   });
       };
     
       $scope.valider_suppression = function(idClient){
    	   console.log("valider suppression client id : " + idClient);
     
    	   if(idClient != null){
    		   $http.post('../gestClients/valider_suppression', {
    			   "clientID": idClient
    		   }).then(function successCallback(response) {	  
    			   	console.log("succes suppression client");
    			    $scope.clients = response.data.clients;
    		   }, function errorCallback(response) {
    			  	console.log("problème suppression client");
    		   });
    	   } else {
     
    		   console.log("impossible suppression -> client null");
    	   }
    	   fermeturePopUp();
       };
     
       $scope.supprimer_client = function(idClient) {
    	   console.log("PopUpSuppression_client id : " + idClient);
    	   $http.post('../gestClients/supprimer', {
    		   "clientID":idClient
    	   }).then(function successCallbak(response){
    		   	$scope.clientSuppr = response.data.client;
    		   	console.log("succes suppression client - nom : " + $scope.clientSuppr.nom);
     
    		   	openPopUp('popUpSuppr');
     
    			return false;
     
    	   }, function errorCallback(response){
    		   console.log("problème modification client");
    	   });	
       }
     
       $scope.modifier_client = function(idClient) {
    	   console.log("modifier_client id : " + idClient);
    	   $http.post('../gestClients/modifier', {
    		   "clientID":idClient
    	   }).then(function successCallbak(response){
    		   	$scope.clientModif = response.data.client;
    		   	console.log("succes modification client - nom : " + $scope.clientModif.nom);
     
    		   	openPopUp('popUpModif');
     
    			return false;
     
    	   }, function errorCallback(response){
    		   console.log("problème modification client");
    	   });
       }
     
       $scope.valider_modification = function(id, nom, prenom, numVoie, typeVoie, nomVoie, codePostal, ville) {
    	   console.log("gestion_clients - Valider modification - id : " + id);
    	   if(id != null){
    		   $http.post('../gestClients/valider_modification', {
    			   	"clientID": id,
    			   	"clientNom": nom,
    			   	"clientPrenom": prenom,
    			   	"clientEmail": email,
    			   	"clientNumeroVoie": numVoie,
    			   	"clientTypeVoie": typeVoie,
    			   	"clientNomVoie": nomVoie,
    			   	"clientCodePostal": codePostal,
    			   	"clientVille": ville
    			   }).success(function(response) {
    				   $scope.clients = response.clients;
    			   }).error(function(response){
    				   $scope.erreurs.push(response.erreurs);
    			   });
    	   } else {
    		   console.log("impossible modification -> client null");
    	   }
    	   fermeturePopUp();
       }
     
     //Fermeture de la pop-up et du fond
     $('a.close, #annulerModif, #annulerSuppr').on('click', function() { //Au clic sur le bouton ou sur le calque...
        	fermeturePopUp();
        	return false;
     });
    });
     
    //Ouverture popup
    function openPopUp(popID){
    	console.log('ouverture popUp ' + popID);
    	 var largeur_fenetre = $(window).width();
    	   	if(largeur_fenetre < 1500){
    			var popWidth = largeur_fenetre - largeur_fenetre * 0.1; //la largeur
    	   	} else {
    			var popWidth = largeur_fenetre - largeur_fenetre * 0.3; //la largeur
    	   	}
     
    		//Faire apparaitre la pop-up
    		$('#' + popID).fadeIn().css({
    			'width': Number(popWidth)
    		});
     
    		//Récupération du margin, qui permettra de centrer la fenêtre - on ajuste de 80px en conformité avec le CSS
    		var popMargTop = ($('#' + popID).height() + 80) / 2;
    		var popMargLeft = ($('#' + popID).width() + 80) / 2;
     
    		//On affecte le margin
    		$('#' + popID).css({
    			'margin-top' : -popMargTop,
    			'margin-left' : -popMargLeft
    		});
     
    		//Effet fade-in du fond opaque
    		$('body').append('<div id="fade"></div>'); //Ajout du fond opaque noir
    		//Apparition du fond - .css({'filter' : 'alpha(opacity=80)'}) pour corriger les bogues de IE
    		$('#fade').css({'filter' : 'alpha(opacity=80)'}).fadeIn();
     
    }
     
    function fermeturePopUp(){
    	   console.log("fermeture pop-up");
    	   $('#fade , .popup_block').fadeOut(function() {
    	   		$('#fade, a.close').remove();  //...ils disparaissent ensemble
    	   	});
    }

    Le fichier persistence.xml qui se trouve dans le dossier WEB-INF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8" ?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
                 version="2.0">
     
        <persistence-unit name="mainunit">
          <properties>
     		  <property name="hibernate.hbm2ddl.auto" value="update"/>
          </properties>
       </persistence-unit>
     
    </persistence>
    Le fichier applicationContext.xml :
    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
    47
    48
    49
    50
    51
    52
    53
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:util="http://www.springframework.org/schema/util"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
              http://www.springframework.org/schema/aop 
                http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
              http://www.springframework.org/schema/util
                http://www.springframework.org/schema/util/spring-util-4.0.xsd
                http://www.springframework.org/schema/context
    			http://www.springframework.org/schema/context/spring-context-4.0.xsd
    			http://www.springframework.org/schema/tx
               http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
               http://www.springframework.org/schema/mvc
    			http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"
    			default-autowire="byName">
     
    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
     
    <bean id="dataSource"
    	  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      	<property name="url" value="jdbc:mariadb://localhost:3306/base_commandes"/>
    	<property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
    	<property name="username" value="root"/>
    	<property name="password" value=""/>		  
    </bean>
     
    <bean 	id="entityManagerFactory"
    		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    		<property name="dataSource" ref="dataSource" />
    		<property name="jpaVendorAdapter">
    			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    				<property name="database" value="MYSQL" />
    				<property name="showSql" value="true" />
    			</bean>
    		</property>
    </bean>
     
    <bean 	id="transactionManager"
    		class="org.springframework.orm.jpa.JpaTransactionManager">
    		<property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
     
    <tx:annotation-driven transaction-manager="transactionManager" />
     
    <bean id="produitDAO" class="com.chezyen.commandes.dao.ProduitDAO" />
    <bean id="clientDAO" class="com.chezyen.commandes.dao.ClientDAO" />
    </beans>
    le web.xml :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="struts_blank" version="2.4"
             xmlns="http://java.sun.com/xml/ns/j2ee" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      <display-name>Struts2 Spring4 JPA2 with Hibernate4</display-name>
     
      <context-param>
      	<param-name>contextConfigLocation</param-name>
      	<param-value>
      		/WEB-INF/applicationContext.xml
      	</param-value>
      </context-param>
      <filter>
      	<filter-name>SpringOpenEntityManagerInViewFilter</filter-name>
      	<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
      </filter>
     
      <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
          org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
      </filter>
     
      <filter-mapping>
      	<filter-name>SpringOpenEntityManagerInViewFilter</filter-name>
      	 <url-pattern>/*</url-pattern>
      </filter-mapping>
      <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
     
      <listener>
      	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
      </welcome-file-list>
    </web-app>
    Si quelqu'un peut m'éclairer, je vous en remercie d'avance !

    OS : LinuxMint 20

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonjour, je viens de résoudre mon problème qui n'était pas un problème de persistance mais plutôt un problème de code.

    En fait j'avais inséré un attribut email dans gestion_client.js, dans struts.xml et dans ActionClients.java alors que je n'avait pas cet attribut dans le fichier html;
    du coup, lors de l'appel à struts.xml, il ne passait pas à ActionClients.java puisqu'il avait des erreurs.

    OS : LinuxMint 20

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [UC] [DC] Problème pour passer de l'un à l'autre
    Par Igou77 dans le forum Cas d'utilisation
    Réponses: 3
    Dernier message: 06/11/2007, 10h41
  2. Problême pour passer une variable dans un SelectCommand
    Par Thetonio007 dans le forum ASP.NET
    Réponses: 12
    Dernier message: 26/06/2007, 14h37
  3. Gtk: problème pour passer une structure en paramètres
    Par C_Chaou dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 19/04/2007, 19h29
  4. [XML] Problème pour passer un paramètre
    Par goddet dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 26/03/2007, 15h16
  5. [JSP] Problème pour passer un array comme paramètre
    Par MxPx_23 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 06/06/2006, 17h13

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