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

Servlets/JSP Java Discussion :

Récupération de champs de deux formulaires dans le meme doPost


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 12
    Points
    12
    Par défaut Récupération de champs de deux formulaires dans le meme doPost
    Bonjour tout le monde. je suis un débutant avec les servlets tomcat. je suis en train de faire un servlet "produit" qui appelle une classe "Produit" dont la méthode doGet, permet d'afficher la liste des produits disponible en stock. Ces produits étant stockés dans un fichier texte. Pour afficher les produit, j'utilise une boucle for. A chaque passage dans la boucle for, j'affiche un produit suivi d'un formulaire qui a la tête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <form method="POST" action="produit" enctype="application/x-www-form-urlencoded">
    state: 
    <input type="radio" name="statut" value="pris"> pris
    <input type="radio" name="statut" value="refus"> refus
    <input type="radio" name="statut" value="indecis">indecis
    <input type="submit" name="OK" value="OK">
    </form>
    Pour l'appeler dans le doGet, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RequestDispatcher rd = getServletContext().getRequestDispatcher("/statu.html");
    rd.include(req, resp);
    Ce formulaire sert à prendre un produit ou non ou à mettre un statut indécis la dessus.
    A la fin de toute la liste, j'affiche aussi un formulaire permettant de supprimer un produit existant ce formulaire se présente comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form method="POST" action="produit" enctype="application/x-www-form-urlencoded">
    Numero du produit  supprimer: 
    <input type="text" size="5" name="index">
    <input type="submit" name="remove" value="Supprimer">
    </form>
    Ici je fais l'appeler dans le doGet, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RequestDispatcher rd = getServletContext().getRequestDispatcher("/prod.html");
    rd.include(req, resp);
    Étant donné que les deux formulaire appellent la même servlet, j'aimerai savoir comme je peux faire pour récupérer ces champs séparément dans la même méthode doPost. (savoir pour chaque produit s'il est pris ou pas. Et savoir aussi si l'utilisateur à demander la suppression d'un produit ou pas). Aider moi s'il vous plait. Ou si j'ai pas été très claire n'hésitez pas à me poser des question de clarté. Merci d'avance

  2. #2
    Membre averti Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Points : 300
    Points
    300
    Par défaut
    Pour connaître l'origine de l'appel à ta servlet (bouton "OK" ou bouton "Supprimer"), tu peux ajouter un paramètre caché "method" dans chacun de tes formulaires.

    Ainsi, dans ton premier formulaire, tu pourrais ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="method" value="update"/>
    Et dans ton deuxième formulaire, tu pourrais ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="method" value="delete"/>
    Dans la méthode "doGet" de ta servlet, il te suffit alors de récupérer l'attribut "method" et d'en tester la valeur :
    • si sa valeur est "update", c'est que l'utilisateur a cliqué sur le bouton "OK"
    • si sa valeur est "delete", c'est que l'utilisateur a cliqué sur le bouton "Supprimer"


    C'est le principe utilisé par les DispatchAction de Struts.
    Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.
    Confucius

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par aJavaDeveloper Voir le message
    Pour connaître l'origine de l'appel à ta servlet (bouton "OK" ou bouton "Supprimer"), tu peux ajouter un paramètre caché "method" dans chacun de tes formulaires.

    Ainsi, dans ton premier formulaire, tu pourrais ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="method" value="update"/>
    Et dans ton deuxième formulaire, tu pourrais ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="method" value="delete"/>
    Dans la méthode "doGet" de ta servlet, il te suffit alors de récupérer l'attribut "method" et d'en tester la valeur :
    • si sa valeur est "update", c'est que l'utilisateur a cliqué sur le bouton "OK"
    • si sa valeur est "delete", c'est que l'utilisateur a cliqué sur le bouton "Supprimer"


    C'est le principe utilisé par les DispatchAction de Struts.
    Merci pour ta réponse. Je pense aussi que je dois tester ces champs cachés plutot dans ma méthode doPost vue que mes formulaire utilise la methode POST.

    Sinon j'appelle ce formulaire (produit) pour chaque produit affiché. Donc si j'ajoute un paramètre caché "method" , si sa valeur est "update", c'est que l'utilisateur a cliqué sur le bouton "OK". Mais comment savoir pour quel produit il a cliqué sur le bouton OK car il y a un bouton OK par produit.

    Est -ce que ce n'est pas possible que le paramètre caché des produit ai comme valeur une variable entière que je peux incrémenté pour chaque produit.
    Ainsi
    • si sa valeur est "delete", c'est que l'utilisateur a cliqué sur le bouton "Supprimer"
    • si sa valeur est un entier, c'est que l'utilisateur a cliqué sur le bouton "OK". ca valeur sera associé au produit qui a ce numero dans l'ordre des affichages.

    Est-ce possible ? si oui comment?

  4. #4
    Membre averti Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Points : 300
    Points
    300
    Par défaut
    En appliquant le même principe, tu pourrais ajouter, dans chaque formulaire, un champ caché te permettant de distinguer les produits entre eux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="productId" value="..."/>
    La valeur du paramètre "productId" pour un produit est l'identifiant que tu associes à ce produit. Cet identifiant te permet d'identifier univoquement le produit.
    Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.
    Confucius

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par aJavaDeveloper Voir le message
    En appliquant le même principe, tu pourrais ajouter, dans chaque formulaire, un champ caché te permettant de distinguer les produits entre eux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="productId" value="..."/>
    Oui mais le formulaire est généré de façon dynamique en fonction du nombre de produit disponible. Donc il faut que ce paramètre puis prendre des valeur qui s'incrémentent automatiquement en fonction du nombre de produit.

  6. #6
    Membre averti Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Points : 300
    Points
    300
    Par défaut
    Tes produits ne sont-ils pas stockés dans une base de données ?
    N'ont-ils pas chacun un identifiant unique ?
    Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.
    Confucius

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Non mes produits sont stocké pour l'instant dans un fichier texte et n'ont pas d'identifiant. Pour les utiliser, je les lis du fichier texte et en fais une LinkedList. Donc l'index de chaque produit dans la liste peux servir d'identifiant unique. Mais comment utiliser cet identifiant pour l'insérer comme valeur du paramètre caché productId de facon dynamique?

  8. #8
    Membre averti Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Points : 300
    Points
    300
    Par défaut
    Je pense que la meilleure solution est d'associer un identifiant (clé primaire) à chacun de tes produits directement dans ton fichier texte (comme s'il s'agissait d'une base de données relationnelle).
    Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.
    Confucius

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par aJavaDeveloper Voir le message
    Je pense que la meilleure solution est d'associer un identifiant (clé primaire) à chacun de tes produits directement dans ton fichier texte (comme s'il s'agissait d'une base de données relationnelle).
    Je ne peux pas modifier le fichier car il m'est donné tel quel. C'est pour ça que j'en fais une LinkedList pour travailler dessus et faire mes modifs dans mon programme.

  10. #10
    Membre averti Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Points : 300
    Points
    300
    Par défaut
    Dans ce cas, l'utilisation de l'index d'un produit en tant qu'identifiant de ce produit me semble être la seule solution.

    Toutefois, je me permets encore une fois de te déconseiller cette approche : rien ne vaut une identification par clé primaire.
    Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.
    Confucius

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par aJavaDeveloper Voir le message
    Dans ce cas, l'utilisation de l'index d'un produit en tant qu'identifiant de ce produit me semble être la seule solution.

    Toutefois, je me permets encore une fois de te déconseiller cette approche : rien ne vaut une identification par clé primaire.
    Ok je vais essayer et je te tiens au courant de ce que ca donne. Une fois de plus merci pour ton aide

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

Discussions similaires

  1. [PHP 5.0] deux formulaires dans un meme fichier php, en envoyer un seul
    Par agnaou dans le forum Langage
    Réponses: 7
    Dernier message: 26/03/2009, 17h38
  2. Réponses: 5
    Dernier message: 20/07/2007, 14h11
  3. Réponses: 3
    Dernier message: 04/05/2006, 09h26
  4. Réponses: 1
    Dernier message: 04/05/2006, 09h26
  5. Récupération des champs d'un form dans un autre
    Par Crazyblinkgirl dans le forum ASP
    Réponses: 10
    Dernier message: 22/06/2004, 10h31

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