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

Struts 1 Java Discussion :

Formulaire qui se submit plusieurs fois


Sujet :

Struts 1 Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Formulaire qui se submit plusieurs fois
    Bonjour, je débute en Java, et j'ai un programme assez complexe en Struts et J2EE à reprendre...
    Il s'agit d'une interface web qui va instancer via Xen API des machines virtuelles.
    Il y a un formulaire de création d'une machine qui demande l'OS choisi, la mémoire etc etc. La vraie création se fait ensuite par JMS dans une queue.

    Voici les actions Struts associées pour la création d'une machine :

    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
     
    <action
          path="/prepareCreateVirtualServer"
          type="com.virt.presentation.action.create.PrepareCreateVirtualServerAction">
          <forward name="success" path="/createVirtualServer.jsp"/>
        </action>
     
    <action
          path="/createVirtualServer"
          type="com.virt.presentation.action.create.CreateVirtualServerAction"
          name="virtualServerForm"
          scope="request"
          validate="true"
          input="/preparecreateVirtualServer.do">
          <forward name="success" path="/viewVirtualServers.do" redirect="true"/>
        </action>
    Maintenant on me demande de faire un workflow de validation.
    C'est-à-dire lorsqu'une personne fait une demande de machine virtuelle, un email est envoyé à l'admin ; pour valider il clique, un exemple machine id=10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://localhost:8080/validVirtualServer.do?id=10
    Ce qui affiche la page viewvirtualserver.jsp en retour avec les manips possibles (démarrage, arrêt etc).

    Mais cette page s'auto-refresh toutes les 10 s.
    Et toutes les 10 s mon formulaire de création de machine virtuelle est exécuté de nouveau !!
    Je ne vois pas du tout pourquoi...

    Le code de l'action de validation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <action
          path="/validVirtualServer"
          scope="request"
          type="com.virt.presentation.action.control.ValidVirtualServerAction">
           <forward name="success" path="/viewVirtualServers.do"/>
        </action>
    Comment empêcher cette revalidation automatique de formulaire ??
    A moins que cela ne vienne de JMS mais je ne crois pas...

    Merci de votre aide.

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    peux-tu mettre le code de la JSP?
    je vois 2 pistes à vérifier :
    - qu'il n'y ait pas la balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <META HTTP-EQUIV="Refresh" CONTENT="n">
    .. cf. ici
    - qu'il n'y a pas en javascript un timeout pour submiter le formulaire.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Voici le code de la jsp
    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
     
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/security.tld" prefix="security" %>
    <!--jsp:useBean id="vservers" scope="request" type="java.util.Collection" /-->
    <!--jsp:useBean id="dvos" scope="request" type="java.util.Collection" /-->
    <!--jsp:useBean id="filtered" scope="request" type="java.lang.Boolean" /-->
     
    <security:validateUser/>
     
    <HTML>
    	<HEAD>
    		<meta http-equiv="refresh" content="10">
    		<TITLE><bean:message key="application.title.short"/></TITLE>
    		<LINK REL="stylesheet" TYPE="text/css" HREF="style.css" TITLE="Style">
    	</HEAD>
    	<BODY>
    	<script LANGUAGE="JavaScript">
    		function confirmSubmit()
    		{
    		var agree=confirm("Etes-vous sûr ?");
    		if (agree)
    			return true ;
    		else
    			return false ;
    		}
    	</script>
    		<%@ include file="header.jsp" %>
    		<%
    		boolean canDelete = false;
    		%>
    		<security:hasResource value="/actions/action.delete.DeleteCustomerAction">
    			<%
    			canDelete = true;
    			%>
    		</security:hasResource>
    		<DIV align="center">
    			<%
    			java.lang.Boolean filtered = (java.lang.Boolean) request.getSession().getAttribute("filtered");
    			filtered = new Boolean(true);
    			if (filtered.booleanValue()) {
    				%>
    				<TABLE width="75%" class="warning">
    					<TR>
    						<TD align="right">
    							<IMG src="images/info.gif"/>
    						</TD>
    						<TD align="left">
    							<bean:message key="warning.customersAreHidden"/>
    						</TD>
    					</TR>
    				</TABLE>
    				<%
    			}
    			%>
    			<%
    			if (!canDelete) {
    				%>
    				<TABLE width="75%" class="warning">
    					<TR>
    						<TD align="right">
    							<IMG src="images/info.gif"/>
    						</TD>
    						<TD align="left">
    							<bean:message key="warning.cantDelete"/>
    						</TD>
    					</TR>
    				</TABLE>
    				<%
    			}
    			if ((filtered.booleanValue()) || (!canDelete)) {
    				%>
    				<P>
    				<%
    			}
    			%>
    			<p><a href="viewVirtualServers.jsp">Actualiser</a></p>
    			<TABLE width="75%" height="50%" class="list">
    				<TR>
    					<TH align="center"><bean:message key="vserver.name"/></TH>
    					<TH align="center"><bean:message key="vserver.ip"/></TH>
    					<TH align="center"><bean:message key="vserver.os"/></TH>
    					<TH align="center"><bean:message key="vserver.state"/></TH>
    					<TH align="center"><bean:message key="vserver.action"/></TH>
    				</TR>
    				<%
    				java.util.Set vservers = (java.util.Set) request.getSession().getAttribute("vservers");
    				if (vservers == null) vservers = new java.util.HashSet();
     
    				java.util.Set dvos = (java.util.Set) request.getSession().getAttribute("dvos");
    				if (dvos == null) dvos = new java.util.HashSet();
     
    				String even = "even";
    				String odd = "odd";
    				String current = even;
     
    				java.util.Iterator iterator = vservers.iterator();
    				while (iterator.hasNext()) {
    					com.virt.integration.VirtualServerVO vserver = (com.virt.integration.VirtualServerVO) iterator.next();
    					Integer state = vserver.getState();
    					String uuid = vserver.getUuid();
    					String ip = vserver.getIp();
    					Integer idvs = vserver.getId();
     
    					java.util.Iterator iterator2 = dvos.iterator();		
    					while (iterator2.hasNext()) {
    						com.virt.integration.DemandVO dvo = (com.virt.integration.DemandVO) iterator2.next();
    						Integer DemandId = dvo.getId();
    						Integer vsid = dvo.getVirtServerId();
    						Integer status = dvo.getStatus();
     
    						if (vsid.equals(idvs)) { 
    					%>
     
    					<TR class="<%=current%>">
    						<TD align="center"><%=(vserver.getName() == null ? "En cours de configuration" : vserver.getName())%></TD>
    						<TD align="center"><%=(ip == null ? "En cours de configuration" : ip )%></TD>
    						<TD align="center"><%=(vserver.getOs() == null ? "En cours de configuration" : vserver.getOs().getName())%></TD>
    						<TD align="center">
    							<% if (state == null) { out.println("En cours de configuration"); }  
    							else if (state.equals(new Integer(1))) { out.println("<img alt=\"Démarré\" src=\"images/running.gif\"/>"); }
    							else if (state.equals(new Integer(3))) { out.println("<img alt=\"Arrêté\" src=\"images/halted.gif\"/>"); }
    							else if (state.equals(new Integer(5))) { out.println("En attente de validation"); }
    							else { out.println("N/A"); };
    							%>
    						</TD>
    						<TD align="center">
    						  	<% if ( (state == null) && (!status.equals(new Integer(0)))) { out.println("N/A"); } 
    							else if (state.equals(new Integer(1))) { out.println("<a href=haltVirtualServer.do?uuid=" + uuid + "><img alt=\"Arrêter\" src=\"images/halt.gif\"/></a><br/><a href=http://" + ip + ":5801\" target=_" + ip + "><img alt=\"Accéder au serveur\" src=\"images/server2.gif\"></a>"); } 
    							else if (state.equals(new Integer(3))) { out.println("<a href=startVirtualServer.do?uuid=" + uuid + "><img alt=\"Démarrer\" src=\"images/start.gif\"/></a><br/><a onclick=\"return confirmSubmit()\" href=deleteVirtualServer.do?uuid=" + uuid + "><img alt=\"Détruire\" src=\"images/trashcan.gif\"></a>");	}
    							if (status.equals(new Integer(0))) { out.println("<a onclick=\"return confirmSubmit()\" href=deleteDemand.do?id=" + DemandId + "><img alt=\"Annuler la demande\" src=\"images/trashcan.gif\"/></a>"); } 
    						 	 %>
    						</TD>
     
    					</TR>
    					<%
    					if (current == even) current = odd;	else current = even;
    					 }	// endif
    					}
    				}
    				%>
     
    			</TABLE>
    		</DIV>
    		<%@ include file="footer.jsp" %>
    	</BODY>
    </HTML>
    Mais j'ai besoin de garder le rafraichissement automatique de cette page justement

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par otterley
    Mais cette page s'auto-refresh toutes les 10 s.
    Et toutes les 10 s mon formulaire de création de machine virtuelle est exécuté de nouveau !!
    Je ne vois pas du tout pourquoi..
    L'auto-refresh est du à cette ligne dans le HEAD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="refresh" content="10">
    Citation Envoyé par otterley Voir le message
    Mais j'ai besoin de garder le rafraichissement automatique de cette page justement
    bah, je ne comprends pas... c'est contradictoire avec ce que tu veux, non?

    il faut que le refresh de ta jsp redirige vers une autre action, que celle de création de serveur...
    il suffit d'ajouter l'attribut "url" dans la balise meta.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Ben en fait l'autorefresh a lieu sur la page jsp de visualisation des serveurs, pas sur le formulaire (enfin l'action Struts) de création de la machine virtuelle justement ?

    C'est-à-dire que le formulaire c'est preparecreateVirtualServer.do et la visualisation c'est viewVirtualServers.do.

    Malgré cela il se submit toutes les 10s, ou alors quelque chose m'échappe dans le fonctionnement des actions Struts...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Pour préciser, l'action Struts de visualisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <action
          path="/viewVirtualServers"
          type="com.virt.presentation.action.view.ViewVirtualServersAction">
          <forward name="success" path="/viewVirtualServers.jsp"/>
        </action>

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="refresh" content="10">
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="refresh" content="10" url="<html:rewrite page="/viewVirtualServers.do"/>">
    comme ça tu rediriges explicitement vers l'action de visualisation et non celle de validation...

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Ben impossible d'essayer ta solution, le lien n'est pas interprété par le navigateur, c'est-à-dire il me renvoie vers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://localhost:8080/%3Chtml:rewrite%20page='/viewVirtualServers.do'/%3E

  9. #9
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut
    est ce que cela pourrait marcher sans le / ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="refresh" content="10" url="<html:rewrite page="viewVirtualServers.do"/>">

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par jdvacheron Voir le message
    est ce que cela pourrait marcher sans le / ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="refresh" content="10" url="<html:rewrite page="viewVirtualServers.do"/>">
    Non le html:rewrite n'est pas décodé...

  11. #11
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut


    merci

  12. #12
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    tu dois rajouter en en-tête de ta jsp la déclaration du taglib html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    sur le même principe que tu avais déclaré le taglib bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    et alors, la balise html:rewrite sera décodée :-)

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    CA MARCHE !!
    merci beaucoup


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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/03/2013, 14h17
  2. [VB.NET]Procédure qui s'éxécute plusieurs fois
    Par ropiet dans le forum Windows Forms
    Réponses: 13
    Dernier message: 25/08/2006, 17h21
  3. Réponses: 11
    Dernier message: 27/06/2006, 15h05
  4. code qui s'execute plusieurs fois
    Par khelif dans le forum JBuilder
    Réponses: 1
    Dernier message: 10/03/2005, 21h56
  5. formulaire qui doit appeler plusieurs pages
    Par rohel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 27/01/2005, 08h59

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