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

JavaScript Discussion :

Generation et soumission de formulaire


Sujet :

JavaScript

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Floréal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Par défaut Generation et soumission de formulaire
    Bonjour,
    Je suis confronté à une difficulté que je ne parviens pas à résoudre. Voici le topo:
    Je travaille sur une application Java/J2EE sous forme de portlet, cette portlet est divisée en différents scénarios identifiés par un nom de fonction, eux même divisés en "action" (ou étapes). On me demande de mettre n place la possibilité de revenir d'une étape vers celle à laquelle elle succède, et ce de manière générique quelque soit l'endroit où l'on se trouve.
    Le passage entre action se fait par paramètre, et je suis parvenu à gérer de manière automatique l'historique de ma navigation.
    Mon problème se situe donc uniquement dans la vue (JSP) plus précisément dans du javascript.
    Je doit placer un bouton dan ma page JSP mais je ne sais pas à l'avance si ce bouton sera ou non inclus dans un formulaire (je le gère par tag), je ne peux donc pas en faire un submit dans un formulaire puisque un élément form ne peut pas avoir pour parent un autre élément form (cf ici).
    Me voila donc contraint de passer par une fonction javascript qui génère un formulaire et le soummet. Pour cela je m'appuie sue cet article de la faq js, et emploi ce code ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms["backForm"].submit();
    Le comportement de ce script change selon le navigateur, dans tous les cas celui ci ne me donne pas de résultat satisfaisant.
    Ma première question est la suivante: peut on utiliser la méthode submit() en faisant appel de cette manière au formulaire.
    Si oui, comment m'assurer que le formulaire que j'ai défini à la volée soit bien envoyé?
    Merci d'avance pour votre aide!

    ------------
    Anexe
    Le Tag JSP pour generer tout ça (j'ai mis XML pour la colorisation, mais c'est bien du JSP):
    Code XML : 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
    <%@tag description="put the tag description here" pageEncoding="windows-1252"%>
     
    <%-- The list of normal or fragment attributes can be specified here: --%>
    <%@attribute name="browseObj" type="com.lasersymag.obj.BrowseObj" required="true" %>
    <%@attribute name="caption" required="false"%>
     
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="VLSC" tagdir="/WEB-INF/tags" %>
    <%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
     
    <c:set var="label" value="Please set a caption for this button"/>
    <c:if test="${caption != null}">
        <c:set var="label" value="${caption}"/>
    </c:if>
     
    <portlet:actionURL windowState="maximized" portletMode="view" var="baseUrl" />
     
    <jsp:useBean class="com.lasersymag.obj.ButtonElementObj" id="backBtn">
        <jsp:setProperty name="backBtn" property="disabled" value="${browseObj.previousParameterMap == null}"/>
        <jsp:setProperty name="backBtn" property="label" value="${label}"/>
        <jsp:setProperty name="backBtn" property="submit" value="${false}"/>
        <jsp:setProperty name="backBtn" property="onclick" value="goBack();"/>
        <jsp:setProperty name="backBtn" property="url" value="${backUrl}"/>
    </jsp:useBean>
     
    <VLSC:Button buttonElementObj="${backBtn}" />
    <c:if test="${browseObj.previousParameterMap != null}">
    <script type="text/javascript">
        function goBack() {
            var formElement = document.createElement('form');
            formElement.name = "backForm";
            formElement.action = "${baseUrl}";
            var input;
            /* <c:forEach var="entry" items="${browseObj.previousParameterMap}"> parameter : ${entry.key} */
            /* <c:forEach var="value" items="${entry.value}"> ${entry.key} => ${value} */
            input = document.createElement('input');
            input.type = "hidden";
            input.name = "${entry.key}";
            input.value = "${value}";
            formElement.appendChild(input);
            /* </c:forEach> next ... */
            /* </c:forEach> End */
     
            input = document.createElement('input');
            input.type = "hidden";
            input.name = "browseAction";
            input.value = "back";
            formElement.appendChild(input);
     
            var body = document.getElementsByTagName("body")[0];
            body.appendChild(formElement);
            document.forms["backForm"].submit();
            return true;
        }
    </script>
    </c:if>
    Un exemple de code généré avec l'utilisation de ce tag:
    Code HTML : 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
    <input onclick="goBack();" type="button" value="Retour" class="submitMouseOut" onMouseOver="this.className='submitMouseOver'" onMouseOut="this.className='submitMouseOut'" />
     
     
     
    <script type="text/javascript">
        function goBack() {
            var formElement = document.createElement('form');
            formElement.name = "backForm";
            formElement.action = "/portal/auth/portal/default/VLSC/vlscWindow?action=d&windowstate=maximized&mode=view";
            var input;
            /*  parameter : stepTableParameterList */
            /*  stepTableParameterList => delete */
            input = document.createElement('input');
            input.type = "hidden";
            input.name = "stepTableParameterList";
            input.value = "delete";
            formElement.appendChild(input);
            /*  next ... */
            /*  parameter : stepTableParameterList_SEARCH_COLUMN */
            /*  stepTableParameterList_SEARCH_COLUMN =>  */
            input = document.createElement('input');
            input.type = "hidden";
            input.name = "stepTableParameterList_SEARCH_COLUMN";
            input.value = "";
            formElement.appendChild(input);
            /*  next ... */
            /*  parameter : stepParameterStructure */
            /*  stepParameterStructure => display */
            input = document.createElement('input');
            input.type = "hidden";
            input.name = "stepParameterStructure";
            input.value = "display";
            formElement.appendChild(input);
            /*  next ... */
            /*  parameter : stepTableParameterList_SEARCH_STRING */
            /*  stepTableParameterList_SEARCH_STRING =>  */
            input = document.createElement('input');
            input.type = "hidden";
            input.name = "stepTableParameterList_SEARCH_STRING";
            input.value = "";
            formElement.appendChild(input);
            /*  next ... */
            /*  parameter : stepTableParameterList_ID */
            /*  stepTableParameterList_ID => 4 */
            input = document.createElement('input');
            input.type = "hidden";
            input.name = "stepTableParameterList_ID";
            input.value = "4";
            formElement.appendChild(input);
            /*  next ... */
            /*  parameter : documentScrollTop */
            /*  documentScrollTop => 228 */
            input = document.createElement('input');
            input.type = "hidden";
            input.name = "documentScrollTop";
            input.value = "228";
            formElement.appendChild(input);
            /*  next ... */
            /*  parameter : stepSelectStore */
            /*  stepSelectStore => display */
            input = document.createElement('input');
            input.type = "hidden";
            input.name = "stepSelectStore";
            input.value = "display";
            formElement.appendChild(input);
            /*  next ... */
            /*  parameter : function */
            /*  function => ManagementParameter */
            input = document.createElement('input');
            input.type = "hidden";
            input.name = "function";
            input.value = "ManagementParameter";
            formElement.appendChild(input);
            /*  next ... */
            /*  End */
            
            input = document.createElement('input');
            input.type = "hidden";
            input.name = "browseAction";
            input.value = "back";
            formElement.appendChild(input);
            
            var body = document.getElementsByTagName("body")[0];
            body.appendChild(formElement);
            document.forms["backForm"].submit();
            return true;
        }
    </script>
    Vous aurez compris que le formulaire renvoi tous les paramètres nécessaire à l'exécution de l'action précédente + browseAction="back" (qui m'est utilie pour indiquer qu'on recule d'un cran dans l'historique l'historique).
    Sous Firefox il sommet un formulaire vide à l'action en cours; IE7 il me renvoie une erreur (voir pièce jointe, j'aurais voulu la quoter mais impossible de copier/coller!).

    Erratum
    En fait, sous firefox cela fonctionne bien. Je n'ai une erreur que sous internet explorer 7.
    Images attachées Images attachées  

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

Discussions similaires

  1. soumission de formulaire
    Par Grodan dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/01/2007, 16h10
  2. Generation de champ de formulaire
    Par Chouquette dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/08/2006, 15h07
  3. soumission de formulaire : problème ..
    Par questionneuse dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 05/06/2006, 19h14
  4. Confirm sur une soumission de formulaire
    Par ephemere2 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/04/2006, 08h59
  5. double click pour soumission de formulaires
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/11/2005, 12h32

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