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

Format d'échange (XML, JSON...) Java Discussion :

Insérer les données saisies dans un formulaire dans un fichier XML avec JDOM [JDOM]


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 169
    Par défaut Insérer les données saisies dans un formulaire dans un fichier XML avec JDOM
    bonjour,

    j'ai un formulaire html :

    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
    <html>
    <head>
    <title>Document Form </title>
    <meta name="DC.Title" xml:lang="EN" content="Dublin Core " />
    <meta name="DC.Creator" content="Alan Kelsey" />
    <meta name="DC.Subject" xml:lang="EN" content="Dublin Core Meta Tags" />
    <meta name="DC.Description" xml:lang="EN" content="documents" />
     
    </head>
    <body>
    <form action="DocumentAction" method="post" validate="true">
        <h2> Formulaire d'ajout de Document</h2>
     
    Titre  :  <input type="texte" name="titre"  size="10"><br>       
    Creator:  <input type="texte" name="creator" size="10"><br>
    Subjet :  <input type="texte" name="subject" size="10"><br>
    Description :  <input type="texte" name="description" size="10"><br>
    <!-- <input type="file" name="datafile" size="40"><br><br> -->
    <input type="submit" value="Enregistrer un document"><br>
     
    </form>
    </body>
    </html>
    et un fichier xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="UTF-8"?>
    <documents>
      <document></document>
     </documents>

    et une classe DocumentAction :

    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
    package beanAction;
     
    import java.io.FileOutputStream;
    import java.util.Collection;
    import org.jdom2.Attribute;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.output.Format;
    import org.jdom2.output.XMLOutputter;
    import org.jdom2.input.SAXBuilder;
     
    import com.opensymphony.xwork2.ActionSupport;
     
    public class DocumentAction extends ActionSupport{
     
    	private static final long serialVersionUID = 1L;
     
    	private String titre;
    	private String creator;
    	private String subject;
    	private String description;
     
     
     
    	static Element racine = new Element("documents");
    	static Document document = new Document(racine);
     
    	public String execute() throws Exception {
     
     
     
     
    		Element doc = new Element("document");
     
    		racine.addContent(doc);
     
    //		Attribute  = new Attribute("classe","P2");
    //		document.setAttribute(get);
     
    		doc.setText(getTitre());
    		doc.setText(getCreator());
    		doc.setText(getSubject());
    		doc.setText(getDescription());
     
     
     
    		enregistre("C:/workspace/GED-1.1/ressources/documents.xml");
    		return null;
     
    	}
     
     
    	static void enregistre(String fichier){
    		try{
    			XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
    			sortie.output(document, new FileOutputStream(fichier));
    			}catch (java.io.IOException e){}
    				}
     
     
     
     
     
    //getters and setters
    	public String getTitre() {
    		return titre;
    	}
     
     
    	public void setTitre(String titre) {
    		this.titre = titre;
    	}
     
    		public String getCreator() {
    		return creator;
    	}
     
     
    	public void setCreator(String creator) {
    		this.creator = creator;
    	}
     
     
    	public String getSubject() {
    		return subject;
    	}
     
     
    	public void setSubject(String subject) {
    		this.subject = subject;
    	}
     
    	public String getDescription() {
    		return description;
    	}
     
     
    	public void setDescription(String description) {
    		this.description = description;
    	}
     
     
     
    }

    et dans mon fichier struts.xml

    j'ai l'action suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <action name="DocumentAction" class="beanAction.DocumentAction">
    		   <result name="document">Document.html</result>
    	  </action>
    quand je rempli le formulaire , et je clique sur le bouton Enregistrer un document , je regarde le fichier xml , je remarque qu'il ajoute seulement le dernier champ du formulaire dans mon cas (description)

    alor moi je veux qu'il ajoute touts les champs (titre, creator, subject, description) dans la balise <document></document>

    comme ca :

    <document>
    <titre> ici le champ saisi dans le formulaire </titre>
    <creator> ici le champ saisi dans le formulaire </creator>
    <<subject> ici le champ saisi dans le formulaire </subject>
    <description> ici le champ saisi dans le formulaire </description>
    </document>

    et chaque fois que j'ouvre le formulaire et je saisi et je valide il doit m'ajouter un document

    j'espère que j'ai bien expliquer mon problem

    Merci de votre aide ^^

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    C'est pas bien solide, comme architecture. La même requête pourrait être faite plusieurs fois en même temps, ce qui donnerait plusieurs threads qui écrivent dans le même fichier en même temps, ce qui donne n'importe quoi.

    Normalement on préfère écrire les données dans des bases de données.

    Citation Envoyé par fruwen7 Voir le message
    j'espère que j'ai bien expliquer mon problem
    Oui. Ton problème c'est que tu n'as pas appris à te servir de JDOM en faisant des tutoriels.

    Si tu veux plusieurs éléments, il faut les créer avec new Element() et les insérer comme enfants de la racine.
    setText(), comme son nom l'indique, n'a rien à voir avec créer des éléments.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 169
    Par défaut
    tu ma critiquer sans me donner une reponse pour m'aider

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par fruwen7 Voir le message
    tu ma critiquer sans me donner une reponse pour m'aider
    Ah bon ?

    - Je t'ai dit qu'il te suffit de te former sur JDOM. Tu ne l'as pas fait et tu n'as pas besoin de faire autre chose. Ce n'est pas difficile, ni à faire, ni à trouver comment faire. Seulement, il faut essayer.
    - Je t'ai dit d'utiliser new Element() et de l'ajouter à l'élément racine.
    - Je t'ai dit que setText() n'a rien à voir avec créer des éléments et pourquoi, te mettant ainsi sur une des voies possibles pour te former.

    Trois aides parfaitement à propos.

    Bosse et on t'aidera, mais honnêtement, un truc aussi simple, il suffit de lire les exemples fournis avec JDOM et on le fait les doigts dans le nez. De l'aide, tu n'en auras pas besoin, quand tu te mettras à travailler.

    Nous savons que tu as travaillé pour en arriver là, je te confirme que c'est en effet une méthode qui devrait marcher. Mais ce n'est pas une raison pour arrêter et demander qu'on fasse la suite.

    - Ah, et je t'ai signalé, au passage, qu'écrire des fichiers XML sur le système de fichier, en réponse à une requête HTTP, ça risque de créer pas mal de soucis. Il vaut mieux une base de donnée. C'est peut-être pas ce que t'as demandé, mais c'est vrai et plus important que le reste.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 169
    Par défaut
    voila ce que j'ai pu faire

    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
    package beanAction;
     
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.List;
    import org.jdom2.Attribute;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
    import org.jdom2.output.Format;
    import org.jdom2.output.XMLOutputter;
     
    import com.opensymphony.xwork2.ActionSupport;
     
    public class DocumentAction extends ActionSupport {
     
    	private static final long serialVersionUID = 1L;
    	private String titre;
    	private String creator;
    	private String subject;
    	private String description;
    	static Element racine = new Element("documents");
    	static Document doc = new Document(racine);
     
    	public String execute() throws Exception {
     
     
    		//On crée une instance de SAXBuilder
    	      SAXBuilder sxb = new SAXBuilder();
    	      try
    	      {
    	         //On crée un nouveau document JDOM avec en argument le fichier XML
    	         //Le parsing est terminé ;)
    	         doc = sxb.build(new File("C:/Documents and Settings/Administrateur/Mes documents/workspace/GED-1.1/ressources/documents.xml"));
    		      racine = doc.getRootElement();
    	      }
    	      catch(Exception e){}
     
    	      //On initialise un nouvel élément racine avec l'élément racine du document.
     
    	      Element document = new Element("document");
    	      racine.addContent(document);
     
     
    	      Element titre = new Element("titre");
    	      Element creator= new Element("creator");
    	      Element subject = new Element("subject");
    	      Element description = new Element("description");
     
    	     racine.addContent(getTitre());
    	     racine.addContent(getCreator());
    	     racine.addContent(getSubject());
    	     racine.addContent(getDescription());
    	     XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
             sortie.output(document, new FileOutputStream("C:/Documents and Settings/Administrateur/Mes documents/workspace/GED-1.1/ressources/documents.xml"));
     
     
    	return null;
     
    }
     
     
    	// getters and setters
    	public String getTitre() {
    		return titre;
    	}
     
    	public void setTitre(String titre) {
    		this.titre = titre;
    	}
     
    	public String getCreator() {
    		return creator;
    	}
     
    	public void setCreator(String creator) {
    		this.creator = creator;
    	}
     
    	public String getSubject() {
    		return subject;
    	}
     
    	public void setSubject(String subject) {
    		this.subject = subject;
    	}
     
    	public String getDescription() {
    		return description;
    	}
     
    	public void setDescription(String description) {
    		this.description = description;
    	}
     
    }
    avant que je l'execute , je veux que tu me dis si il y'a des fautes
    et aussi si tu a des remarques ou des conseils je suis a votre ecoute ^^

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    J'ai l'impression que tu tapes des lignes de code au hasard sans rien comprendre.

    Il n'y a aucune logique dans ce que tu fais :
    - tu crées un Document et tu n'en fais rien, puis tu parses un fichier XML déjà existant (ce qui n'est pas utile puisque le fichier en question va être entièrement refait.)
    => SAXBuilder c'est quand on veut lire un fichier XML, or toi tu veux le créer et l'écrire. SAXBuilder n'est pas ce qu'il te faut, tu as juste besoin de new Document() et d'y mettre du contenu.
    Cela est décrit dans ce tutoriel JDOM.

    - tu crées des éléments et tu n'en fais rien
    => En Java, en général, créer des objets ne sert à rien si on ne s'en sert pas. Autrement dit, c'est forcément qu'on se trompe quelque part. C'est le cas aussi avec JDOM.

    - au lieu de mettre des éléments dans ta racine, tu y mets des String.
    => Mets-y des éléments, ceux que tu as créés.

    Il est clair que tu n'as rien lu sur JDOM, pas le moindre exemple, pas le moindre tutoriel. Je t'ai déjà dit de lire des exemples et des tutoriels. C'est vrai que JDOM est facile quand on a l'habitude de XML, et que beaucoup de gens arrivent à s'en servir sans lire les tutoriels. Mais toi tu en as clairement besoin.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Excel/Vba insérer les données d'une feuille excel dans le corps d'un email
    Par shakapouet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/10/2011, 12h02
  2. Réponses: 2
    Dernier message: 02/06/2007, 17h21
  3. Données d'un sous-formulaire dans un formulaire
    Par zeloutre dans le forum IHM
    Réponses: 8
    Dernier message: 21/07/2006, 11h06
  4. Réponses: 1
    Dernier message: 20/12/2005, 15h56
  5. Réponses: 6
    Dernier message: 26/11/2005, 15h43

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