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 :

getParameterValues et jsp


Sujet :

Struts 1 Java

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 261
    Par défaut getParameterValues et jsp
    Salut,

    Suite à une première action, j'ai en retour dans ma jsp des valeurs issues de ma base. Une seconde action va récupérer une valeur issue de l'affichage de cette première action et retourner en plus d'autres valeurs. Le souci est que mon getParameterValues me retournent un résultat nul alors qu'il y a des valeurs:

    Dans mon action, en plus d'un premier traitement, j'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String [] res =	request.getParameterValues("montant");
     
    		System.out.println(res);
    Mais le contenu est null sachant qu'il est le resultat de la value d'un checkbox, et que la value de ce dernier est un composant de ma première action.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <html:checkbox property="montant" value="${f.montant}" />
    j'ai essayé d'être clair. Désolé si ça l'est pas...
    Merci

  2. #2
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Pour récupérer la valeur de la propriété montant, il faut plutôt utiliser le getter getMontant() de l'ActionForm.

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 261
    Par défaut
    Je l'avais fais, mais il me le trouve null alors qu'il y a un integer.

  4. #4
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Le scope du form-bean est-il égal à session dans le mapping des deux Actions ?

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 261
    Par défaut
    Oui le scope est égal à session pour les deux form-beans. C'est pourtant comme si l'info du premier form-bean ne perdurait pas.

    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
     
     
    	<action path="/facture"
    			type="gest.abonne.actions.Facture"
    			name="factureAbo"
    			scope="session"
    			input="/facture.jsp">
    			<forward name="facture_client" path="/facture.jsp"></forward>
    	 </action>
     
     
    		<action path="/factureCompte"
    			type="gest.abonne.actions.FactureCompte"
    			name="factureCompteAbo"
    			scope="session"
    			input="/facture.jsp">
    			<forward name="facture_compte_client" path="/facture.jsp"></forward>
    	 </action>

  6. #6
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Tu initialises la propriété montant via l'EL ${f.montant}.
    Peux-tu montrer comment tu définis f dans la jsp ?

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 261
    Par défaut
    Sur la fin, j'ai un oeu tout tenté, donc j'espère que c'est encore cohérent. Le premier form ramène une liste de factures, et dans le second, il faudait que le montant de chaque facture cochée, via la checkbox, soit réutilisé dans le second form comme montant total.

    Je mets les actions, même si j'ai pas mal touché.

    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
    <html:form action="facture.do" >
    	<core:if test="${consommation!=null}">
    		<table width="100%">
    			<tr>
    				<th>n° facture</th>
    				<th>montant</th>
    				<th>abonnement</th>
    				<th>régler</th>
    				<th>date de début</th>
    				<th>date de fin</th>
    				<th>cocher</th>
    			</tr>
    			<core:forEach items="${consommation}" var="f">
    				<tr>
    					<td align="center">${f.noFacture}</td>
    					<td align="center">${f.montant}</td>
    					<td align="center">${f.typeAbonnement}</td>
    					<td align="center">${f.regler}</td>
    					<core:set var="dateDeb" scope="request" value="${f.dateDebut}"></core:set>
    					<td align="center">
    					<%
    						String chaineDep = request.getAttribute("dateDeb")
    											.toString();
     
    									String[] tabDeb = chaineDep.split(" ");
    									String[] tabDebDate = tabDeb[0].split("-");
    					%> <%=tabDebDate[2]%>/<%=tabDebDate[1]%>/<%=tabDebDate[0]%></td>
    					<core:set var="dateFin" scope="request" value="${f.dateFin}"></core:set>
    					<td align="center">
    					<%
    						String chaineFin = request.getAttribute("dateFin")
    											.toString();
    									String[] tabFin = chaineFin.split(" ");
    									String[] tabFinDate = tabFin[0].split("-");
    					%> <%=tabFinDate[2]%>/<%=tabFinDate[1]%>/<%=tabFinDate[0]%></td>
    					<core:if test="${f.regler!='oui'}">
    						<td>
    						<!-- si le f.regler est null alors -->
     
     <html:checkbox property="montantFact" value="${f.montant}" />
    </td>
    					</core:if>
    				</tr>
    			</core:forEach>
    			<tr>
    				<td align="right" colspan="7">&nbsp;</td>
    			</tr>
    			<tr>
    				<td align="right" colspan="7"><a href="factureCompte.do"
    					style="text-decoration: none">sélectionner</a></td>
    			</tr>
    			<core:if test="${fn:length(consommation) == 0}">
    				<table width="100%">
    					<tr>
    						<td>
    </td>
    					</tr>
    					<tr>
    						<td>
    						<div align="center"><font color="red">Vous n'avez pas
    						encore de factures !</font></div>
    						</td>
    					</tr>
    				</table>
    			</core:if>
    			<tr>
    				<td colspan="7"></td>
    			</tr>
    		</table>
    	</core:if>
     
     
     
     
    </html:form> 
     
     <html:form action="factureCompte.do">
    	<core:if test="${etatCompte!=null}">
    		<table width="100%">
    			<tr>
    				<th>nom</th>
    				<th>prénom</th>
    				<th>numCompte</th>
    				<th>solde</th>
    				<th>pass</th>
    				<th>montant</th>
    			</tr>
     
    			<tr>
    				<td align="center">${etatCompte.nom}</td>
    				<td align="center">${etatCompte.prenom}</td>
    				<td align="center">${etatCompte.numCompte}</td>
    				<td align="center">${etatCompte.solde}</td>
    				<td align="center"><html:password property="password" size="10"></html:password>
    				</td>
    				<td align="center"><html:text property="montantTotal" size="10"
    					disabled="true">
     
     
    				</html:text></td>
    			</tr>
    			<tr>
    				<td colspan="6"><%
    	FactureVue fv = (FactureVue)session.getAttribute("FactureVue");
    	fv.getMontant();
    	out.print(fv.getMontant());
    	%>
    <core:if test="${consommation!=null}"><core:forEach items="${consommation}" var="f">${f.montant}</core:forEach>
    </core:if>
    </td>
    			</tr>
    	<tr>
    				<td align="right" colspan="7"><a href=""
    					style="text-decoration: none">régler</a></td>
    			</tr>
    		</table>
    Perso, je pense pour un souci ou bien au niveau de la persistance, ou bien au niveau de mon request.getParameterValues.
    Mais je t'avouerai que je débute

    Bon moi je m'y remets et merci encore

    premier form
    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
     
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws Exception {
    		//
    		HttpSession session = request.getSession();
    		//
    		String forward = "facture_client";
    		FactureForm monForm = (FactureForm)form;
    		int noAbo = monForm.getNoAbo();
    		System.out.println(noAbo);
    		MetierFactureVue mFactVue = new MetierFactureVue();
    		request.setAttribute("consommation", mFactVue.getAllFactByAbo(1));
    		//
     
    		session.setAttribute("consommation", mFactVue.getAllFactByAbo(1));
    		System.out.println(monForm.getMontantFact());
    		List<FactureVue> liste = new MetierFactureVue().getAllFactByAbo(1);
    		System.out.println(liste);
    		for(FactureVue f : liste ){
    			System.out.println("noFact : " + f.getNoFacture() + "montant : " + f.getMontant() + f.getDateFin());
    		}
    		//
    		return mapping.findForward(forward);
    	}
    second form

    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
     
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws Exception {
     
    		String forward = "facture_compte_client";
    		FactureCompteForm monForm = (FactureCompteForm)form;
    		int noAbo = monForm.getNoAbo();
    		System.out.println(noAbo);
    		MetierFactureAbo mFactAbo = new MetierFactureAbo();
    		request.setAttribute("etatCompte", mFactAbo.getCompteByNoabo(1));
     
     
    		//factureAbo mb = (factureAbo)session.getAttribute("MonFormBean")
    		String [] res =	request.getParameterValues("montantFact");
    		System.out.println(res);
    		System.out.println(monForm.getMontantFact());
     
    		return mapping.findForward(forward);
     
     
    	}
    J'ai mis pas mal d'affichages

  8. #8
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    En fait, je n'avais pas fait attention que tu avais deux form-beans et non un seul. Ce serait bien plus simple avec un seul form-bean.

    Sinon, tu n'avais pas précisé que le tag html:checkbox était dans une boucle forEach.
    Donc, déjà, pour pouvoir récupérer les valeurs des checkbox cochées, il faudrait plutôt utiliser le tag html:multibox et définir montantFact comme un tableau de String dans l'ActionForm.

    En fait, j'ai un peu de mal à comprendre comment ça fonctionne.
    Je ne vois pas de bouton submit dans ton premier formulaire, seulement un lien href qui exécute l'Action de path /factureCompte.do.
    Donc, le formulaire factureAbo n'est jamais soumis et la propriété montantFact du formulaire factureAbo n'est jamais mise à jour.

    Bref, c'est clair que ça ne peut fonctionner en l'état.

  9. #9
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 261
    Par défaut
    En changeant,en passant de checkbox à multibox, les infos se transmettent bien dans le second form.

    Je me l'explique pas forcemment, mais bon, je vais essayer de récuperer maintenant que les montant sélectionnés et d'en faire une somme.

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

Discussions similaires

  1. [XSLT][JSP] solution technique pour cas typique
    Par Alix_10 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/09/2006, 13h09
  2. [JSP] getParameterValues récalcitrant sous Mozilla Firefox
    Par dosbastos dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 15/06/2006, 23h04
  3. Erreur lors de l'execution d'un script jsp
    Par tuxor dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 06/08/2004, 12h35
  4. [JSP/Servlet] Outils pour developper?
    Par BenoitM dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/05/2004, 11h03
  5. problème JSP avec JBuilder et Weblogic 7
    Par viny dans le forum JBuilder
    Réponses: 2
    Dernier message: 24/04/2003, 08h07

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