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 :

défnir valeur par défaut listbox


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 46
    Points : 28
    Points
    28
    Par défaut défnir valeur par défaut listbox
    Bonjour à tous,

    Je m'excuse d'avance si ma question a déjà été posée, pourtant j'ai cherché sans trouver mon bonheur.

    J'explique mon problème. J'ai une listbox dont les valeurs sont récupérées dans une base.
    J'aimerais au chargement de la page que la valeur selectionnée par défaut est une des celles disponibles.

    Par exemple : elle a A, B, C, D, E, all

    Actuellement, j'ai "all". J'aimerais donc qu'elle soit "B" par exemple.

    Voici mon code qui fonctionne avec "all" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <td style="width:100px;border-color:blue;border-style:solid;border-width:1px 0px 1px 0px;">
           <bean:message key="bicform.property.filter.flags"/>&nbsp;
           <html:select name="viewBicForm" property="filteredModificationFlag">
     
           <html:option value=""><bean:message key="bicform.property.filter.flag.all"/></html:option>
           <html:options collection="flags" property="flag"/>
           </html:select>
    </td>
    En espérant d'être clair dans mon explication.

  2. #2
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Il suffit d'initialiser la propriété filteredModificationFlag du form-bean viewBicForm à B dans l'Action qui s'exécute avant l'affichage du formulaire.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Merci c_nvy pour la réponse, mais ca ne marche pas car du coup il est bloqué sur cette valeur initialisée à chaque action...normal...puisqu'il repasse par cette instruction.

  4. #4
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Il faut mettre cette initialisation de la propriété filteredModificationFlag dans une Action d'initialisation du formulaire qui n'est appelée qu'une seule fois, au premier affichage du formulaire.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Mercy encore une fois c_nvy.
    Ca fait plaisir d'avoir les gens comme toi

    Le problème c'est que à la phase d'initialisation, c'est dans LoginAction et du coup ma viewBicForm n'est pas encore instanciée ("impossible" de toute façon).

    Alors je pense au début de mon action (BicAction), avec une variable static. Cela marche seulement la 1ère fois, parce que après la déconnexion et relogin la listebox est initialée à "all" et plus à "B".

    Désolé d'être aussi bleu, je débute...
    Peut-on essayer de le faire, si possible bienentendu, dans le JSP svp ?!

  6. #6
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Si LoginAction n'est pas liée à viewBicForm, elle peut faire un forward vers une Action d'initialisation (par exemple InitBicAction) liée à viewBicForm.

    Dans le mapping de cette Action d'initialisation, il faut mettre l'attribut name="viewBicForm" , l'attribut validate à false et la même valeur dans l'attribut scope que dans le mapping de l'Action BicAction.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Voici mon mapping
    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
     
    <action path="/logon"   type="bicadm.actions.LoginAction" 
    				parameter="actionId" 
    				scope="request" 
    				name="loginForm" 
    				validate="true" 
    				input="/jsp/habilitation.jsp">
    			<forward name="viewRoleAdm" path="/viewb.do?actionId=action.view.bic"/>
    		</action>
    		<action path="/logout" type="bicadm.actions.LoginAction" 
    				parameter="actionId">
    		</action>
     
    		<action path="/viewb" 
    				type="bicadm.actions.BicViewAction" 
    				name="bicForm" 
    				scope="session" 
    				validate="false"
    				parameter="actionId">
    			<forward name="viewb" path="/jsp/bic.jsp"/>	  
      		</action>
    La question c'est comment faire ce que tu m'as dit ?!

  8. #8
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    BicViewAction est-elle une DispatchAction ou une LookupDispatchAction ?

    Si c'est bien le cas, tu n'as pas besoin de créer une Action d'initialisation.
    Tu peux tout simplement créer une méthode dans cette Action qui initialisera la propriété filteredModificationFlag du form-bean viewBicForm et qui sera appelée lors du forward de LoginAction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <action path="/logon"   type="bicadm.actions.LoginAction" 
    			parameter="actionId" 
    			scope="request" 
    			name="loginForm" 
    			validate="true" 
    			input="/jsp/habilitation.jsp">
    	<forward name="viewRoleAdm" path="/viewb.do?actionId=action.init.bic"/>
    </action>

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Pour répondre à ta question, BicViewAction est de type AbstractLookupDispatchAction.

    Alors j'ai suivi ton conseil, mais ca marche toujours pas...

    J'ai créé une méthode dans BicViewAction

    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
     
     
     
    public ActionForward initializeConfigAction(ActionMapping in_mapping,
    	  		ActionForm in_form,
    	  		HttpServletRequest in_request,
    	  		HttpServletResponse in_response) throws Exception{
     
    		BicForm viewForm = (BicForm)in_form;
     
    		try{
     
    			viewForm.setFilteredModificationFlag(Constants.FLAG_X);
     
     
     
    		}
    		catch (Throwable e)
    		{
    			e.printStackTrace();
    		}
    		in_request.setAttribute("viewBicForm", viewForm);
    		return in_mapping.findForward("viewb");
    	}
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected Map getKeyMethodMap() 
    	{
    		Map<String,String> map = new HashMap<String,String>();
    		map.put("action.view.bic", "viewBic");
    		map.put("action.init.bic", "initializeConfigAction");
    		return map;
    	}
    Ca marche mais du coup mon tableau qui doit être rempli (par ViewBicAction) après le LoginAction est vide...


  10. #10
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Pas facile de comprendre comment ça fonctionne sans avoir tout le code sous les yeux.

    Si la méthode viewBic est celle qui alimente la collection flags, c'est donc une méthode d'initialisation de la page.
    Tu peux donc y initialiser la propriété filteredModificationFlag à B.

    Par contre, tu devrais avoir une autre méthode qui s'exécute au submit du formulaire. Est-ce bien le cas ?

    Sinon, pour info, il n'y a pas de raison de mettre le form-bean viewBicForm dans le scope request via un setAttribute dans l'Action.
    A partir du moment où tu as précisé scope="request" et name="viewBicForm" dans le mapping de l'Action, Struts mets automatiquement le form-bean viewBicForm dans le scope request.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Merci c_nvy pour les efforts !!!

    Mon appli est probablement très simple pour toi, une une page d'authentification, après il arrive directement sur la page et la seule ( d'où dans mon struts-config.xml précédent, j'ai fait action forward actionId=action.view.bic) qui permet de voir les données d'une base sous forme de tableau, puis 3 boutons (ajouter, modifier, supprimer).


    Dans LoginAction, comme son nom l'indique : authentification puis initialisation. C'est ici que je récupère les données de la listebox et les stocker dans une classe avec une variable static ArrayList et une méthode static associée.

    Dans BicViewAction, je passe une requête à la base et afficher le résultat dans le tableau.



    Après la modif que tu m'as conseillée, dans le mapping action, le foward de LoginAction n'est pas action.view.bic mais action.init.bic, du coup à la connexion mon tableau est vide ("normal") puisque action.view.bic n'est pas appelée.

    Je pourrais p-e mettre la fonction viewBic dans init() mais ca fait pas propre...
    Je mettrai le code si c'est néccessaire, parce que ca fait un peu de bordel quand même.

  12. #12
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Dans BicViewAction, tu as une méthode dans laquelle tu passes une requête à la base pour constituer la collection que tu affiches dans la page.
    C'est donc ce que j'appelle une méthode d'initialisation.
    Tu peux donc y mettre l'initialisation de la propriété filteredModificationFlag.

    Et LoginAction forwarde vers cette méthode comme tu avais fait au début.

    Par contre, il te faut définir une autre méthode qui sera exécutée au submit du formulaire.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Je l'ai fait comme tu as décrit.
    En fait, la listebox + quelques autres servent à filtrer mes données.
    Donc il y a un bouton "Filtrer" qui appelle une fonction Javascript et ré-exécuter cette méthode "Dans BicViewAction, tu as une méthode dans laquelle tu passes une requête à la base pour constituer la collection que tu affiches dans la page."

    Comme tu peux la voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function filter()
    	{
        	document.forms[0].currentPageT1.value = "0";
        	document.forms[0].action="<html:rewrite page="/viewb.do?actionId=action.view.bic"/>";
       	document.forms[0].actionId.value='action.view.bic';
    	document.forms[0].submit();
    	disableLinks();				   
       	}
    Donc la fonction d'iniatilisation est toujours exécutée, la valeur de ma listebox est bloquée sur la même. Si je fais en sorte qu'elle s'exécute une fois (avec variable static) elle marche que pour la 1ere fois, après c'est chargé dans le cache du serveur. Je reviens dans la case de départ

    A part, si tu veux bien donner ton avis, de "dupliquer" la méthode action.view.bic en changeant son nom qui a une seule différence (la fonction init)...mais ca c'est un peu dégueulasse

  14. #14
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Alors, si c'est toujours la même méthode qui est exécutée, il faut ajouter un test à l'intérieur pour déterminer si aucun bouton n'a été sélectionné et dans ce cas, initialiser la propriété filteredModificationFlag.

    Si tu utilises bien le bouton submit avec l'attribut property, tu peux par exemple initialiser cette propriété par défaut à la valeur init dans l'ActionForm et ensuite, tester dans la méthode si elle a pour valeur init et si oui, initialiser la propriété filteredModificationFlag.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Dans mon JSP, le bouton "Search" qui permet de filtrer les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <td style="text-align:right;">
          <img src='<html:rewrite page="/images/24-zoom.png"/>' 
               alt='<bean:message key="bicform.property.filter"/>' name="imageCal" style="vertical-align:middle;cursor:pointer;" 
          onclick="javascript:filter()"/>&nbsp;
     </td>
    La fonction filter() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function filter()
    	{
        	document.forms[0].currentPageT1.value = "0";
        	document.forms[0].action="<html:rewrite page="/viewb.do?actionId=action.view.bic"/>";
       	document.forms[0].actionId.value='action.view.bic';
    	document.forms[0].submit();
    	disableLinks();				   
       	}
    Comment faire par rapport à ce que tu dis ?

  16. #16
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Tu pourrais ajouter une propriété supplémentaire dans l'ActionForm que tu initialiserais à la valeur init par exemple et que tu modifierais dans la fonction filter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms[0].bouton.value='search';
    Il faudrait l'ajouter en champ caché via un tag html:hidden :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:hidden property="bouton"/>
    pour que sa valeur soit modifiée au submit du formulaire.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Ca roule

    Merci beaucoup c_nvy !!!

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

Discussions similaires

  1. ListBox Valeur par défaut
    Par pythagore3_14 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/05/2020, 18h00
  2. Listbox et selection valeur par défaut
    Par cazadeis dans le forum Windows Forms
    Réponses: 5
    Dernier message: 16/06/2009, 18h13
  3. [2.3.0] Valeur par défaut d'une ListBox
    Par scariou29 dans le forum BIRT
    Réponses: 8
    Dernier message: 24/12/2008, 15h54
  4. Réponses: 2
    Dernier message: 18/10/2003, 14h42
  5. Unique + valeur par défaut
    Par ketalie dans le forum Outils
    Réponses: 4
    Dernier message: 02/07/2003, 15h29

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