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

JSF Java Discussion :

Réinitialisation des données dans une page - Pb de cycle de vie JSF ?


Sujet :

JSF Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Réinitialisation des données dans une page - Pb de cycle de vie JSF ?
    Bonjour,

    Je travaille sur une application utilisant JSF avec Wildfly 8 comme conteneur et PrimeFaces pour l'aspect graphique,
    Je bloque sur un point particulier, je souhaite que l'utilisateur puisse sélectionner un 'jeu de scénario' parmi une liste de jeux de scénarios tirée de la base de données puis afficher des éléments de ce jeu de scénario (données de temps ou réseau), leur associer du texte pour afficher comme légende sur un graphique à créer.

    Le problème vient du fait que la méthode init() de ma classe (utilisée avec @PostConstruct) est appelée à différents moments du traitement ce qui me réinitialise mes données et je termine alors avec un NullPointerException.
    Je ne sais pas si c'est un problème de cycle de vie JSF, d'une mauvaise utilisation de Primefaces et d'ajax ou encore autre chose.

    Traitement
    Dans une classe MBStatistics associée une page statistics.xhtml, je crée ma liste de jeux de scénarios dans une nouvelle fenêtre avec une classe MBStatView associée la page statView.xhtml (utilisation d'un Listener). L'utilisateur sélectionne une des lignes de la liste ce qui retourne un jeu de scenario 'jeuscen'.
    A partir de là une liste d'objets DataToPost 'listScenData' est mise à jour avec les valeurs du Jeu de Scenario (toujours dans la page statistics)
    L'utilisateur peut en sélectionner plusieurs parmi les 8 valeurs ce qui renvoie une nouvelle liste d'objets DataToPost 'selectedData'.
    Et des que l'utilisateur clique sur le bouton permettant de générer des graphes, la méthode init() est rappelée (entre autre) et tous mes objets réinitialisés.
    A noter que mon objet 'jeuscen' est aussi réinitialisé alors qu'il n'est pas présent dans cette méthode ce qui me fait croire que tous les objets sont réinitialisés lors d'un rechargement de la page.

    J'utilise dans ma page statistics.xhtml de l'ajax avec une option update sur un commandButton pour mettre à jour ma liste d'objets DataToPost
    http://www.primefaces.org/showcase/ui/df/data.xhtml


    MBStatistics
    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
     
    @ManagedBean
    @RequestScoped
    public class MBStatistics implements Serializable {
     
    	private static final long serialVersionUID = 1L;
     
            private Jeuscenario jeuscen;
     
    	  private DataToPost dtp1 = new DataToPost(1, "No Data", "Result Time", "");
    	private DataToPost dtp2 = new DataToPost(2, "No Data", "Result Time", "");
            ...
    	private DataToPost dtp8 = new DataToPost(8, "No Data", "Network Time", "");
     
    	private List <DataToPost>  listScenData = new ArrayList<DataToPost> ();  
     
     
    	@PostConstruct
    	private void initMBStat() {
                             ....
     
    			listScenData.add(dtp1);
    			listScenData.add(dtp2);
    			listScenData.add(dtp3);
    			listScenData.add(dtp4);
    			listScenData.add(dtp5);
    			listScenData.add(dtp6);
    			listScenData.add(dtp7);
    			listScenData.add(dtp8);
    		System.out.println("MBStatistics : initMBStat finish");
    	}
     
    //////////////////////////////////////////////////////////////
        public void chooseJeuscen() {
            Map<String,Object> options = new HashMap<String, Object>();
            options.put("resizable", false);
            options.put("draggable", false);
            options.put("modal", true);
            RequestContext.getCurrentInstance().openDialog("statView", options, null);
        }
     
    //////////////////////////////////////////////////////////////
      public void onJeuscenChosen(SelectEvent event) {
            jeuscen = (Jeuscenario) event.getObject();
            System.out.println("jeuscen Choosen : " +jeuscen.getName());
     
     
     
            // attribution des données temps et réseau pour affichage
             f_listData.add(jeuscen.getScenarios().get(0).getResultimes().getNametime1());
    		dtp1=listScenData.get(0);
    		dtp1.setName(jeuscen.getScenarios().get(0).getResultimes().getNametime1());
    		listScenData.remove(0);
    		listScenData.add(0,dtp1);
     
     
        	f_listData.add(jeuscen.getScenarios().get(0).getResultimes().getNametime2());
     
            if (jeuscen.getScenarios().get(0).getResultimes().getNametime2()==null)
       		{}
            else 
            {
    			dtp2=listScenData.get(1);
    			dtp2.setName(jeuscen.getScenarios().get(0).getResultimes().getNametime2());
    			listScenData.remove(1);
    			listScenData.add(1,dtp2);
     
                            f_listData.add(jeuscen.getScenarios().get(0).getResultimes().getNametime2());
            }
     
           ....
     
            if (jeuscen.getScenarios().get(0).getBdbnetwork().getNamenetw4()==null)
       		{}
    	   else
    	   {
    			dtp8=listScenData.get(7);
    			dtp8.setName(jeuscen.getScenarios().get(0).getBdbnetwork().getNamenetw4());
    			listScenData.remove(7);
    			listScenData.add(7,dtp8);
    	         f_listData.add(jeuscen.getScenarios().get(0).getBdbnetwork().getNamenetw4());
    	   }    
     
     
     
            f_listData.add("<var parameter>");
     
            varParameter=jeuscen.getVarparameter();
     
     
    		System.out.println("onJeuscenChosen finish");
        }
     
     
    //////////////////////////////////////////////////////////////
    		public String createChart(){
     
    		// Build lists of String for time and network for create chart
    		int cptResultimes=0;
    		int cptBdbnetworks=0;
     
    		/// TEST		
    		for (DataToPost dtp : listScenData)
    		{
    			System.out.println("listScenData : data n°"+dtp.getId()+", name :"+dtp.getName()+", legend"+dtp.getLegend());
    		}
     
    		for (DataToPost dtp : selectedData)
    		{
    			System.out.println("selectedData : data n°"+dtp.getId()+", name :"+dtp.getName()+", legend"+dtp.getLegend());
    		}
     
    		System.out.println("nb de DataToPost "+selectedData.size());
    		System.out.println(dtp1.getName() +" "+ dtp2.getName()+" "+ dtp3.getName()+" "+ dtp4.getName());
     
                    ...
     
    		for (int i=0; i<jeuscen.getNbscen();i++)
    		{
    			listScenFinal.add(jeuscen.getScenarios().get(i));
    		 }
     
    		 ...
            }
    statistics.xhtml
    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
     
    <h:form id="formToUpdate" target="_blank">
    		<div class="ui-grid ui-grid-responsive">
    			<div class="ui-grid-row">
    				<div class="ui-grid-col-12">
     
     
     
     
     
    						    <p:commandButton value="Select Set Scenario" icon="ui-icon-extlink" actionListener="#{mBStatistics.chooseJeuscen()}">
    						        <p:ajax event="dialogReturn" listener="#{mBStatistics.onJeuscenChosen}" update="ckb_DataPost" />
    						    </p:commandButton>
     
     
     
    					</div>
    				</div>
    			</div>
     
     
    	<br />
    	<br />
     
    			<div class="ui-grid ui-grid-responsive">
    				<div class="ui-grid-row">
    					<div class="ui-grid-col-6">				
    						<h3>Build Chart</h3>
    						<div >
     
     
    						    <p:dataTable id="ckb_DataPost" var="dataToPost" value="#{mBStatistics.listScenData}" selection="#{mBStatistics.selectedData}" rowKey="#{dataToPost.id}" style="margin-bottom:0">
    						        <f:facet name="header">
    						            Checkbox
    						        </f:facet>
    						        <p:column selectionMode="multiple" style="width:16px;text-align:center"/>
    						        <p:column headerText="Id">
    						            <h:outputText value="#{dataToPost.id}" />
    						        </p:column>
    						        <p:column headerText="Name">
    						            <h:outputText value="#{dataToPost.name}" />
    						        </p:column>
    						        <p:column headerText="Type">
    						            <h:outputText value="#{dataToPost.timeOrNet}" />
    						        </p:column>
    						        <p:column headerText="Legend">
    						            <h:inputText value="#{dataToPost.legend}" />
    						        </p:column>
     
    						    </p:dataTable>
     
    					 </div>
    On voit sur le résultat en console que dès que le bouton de génération de graphes est cliqué (default task-35) la méthode init() est de nouveau appelée.

    Résultat en console
    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
     
    10:20:36,389 INFO  [stdout] (default task-11) MBStatistics : initMBStat finish
    10:20:39,976 INFO  [stdout] (default task-22) MBStatistics : initMBStat finish
    10:20:40,149 INFO  [stdout] (default task-24) --Select all jeuscenarios order by id 
    10:20:40,362 INFO  [stdout] (default task-24) --Select all scenarios order by id 
    10:20:40,783 INFO  [stdout] (default task-24) MBStatView : init finish
    10:20:42,751 INFO  [stdout] (default task-33) MBStatistics : initMBStat finish
    10:20:42,752 INFO  [stdout] (default task-33) jeuscen Choosen : SDU16-F9900
    10:20:42,756 INFO  [stdout] (default task-33) Resultimes :Java Time | Elap. Time | SqlnetMsgFromDblink | SqlnetMoreDataDblink
    10:20:42,757 INFO  [stdout] (default task-33) Network :Nb Fetch | MsgFromDblinkPckts | MoreDataDblinkPckts | null
    10:20:42,757 INFO  [stdout] (default task-33) listScenData :data n°1, name :Java Time, legend
    10:20:42,758 INFO  [stdout] (default task-33) listScenData :data n°2, name :Elap. Time, legend
    10:20:42,758 INFO  [stdout] (default task-33) listScenData :data n°3, name :SqlnetMsgFromDblink, legend
    10:20:42,758 INFO  [stdout] (default task-33) listScenData :data n°4, name :SqlnetMoreDataDblink, legend
    10:20:42,758 INFO  [stdout] (default task-33) listScenData :data n°5, name :Nb Fetch, legend
    10:20:42,758 INFO  [stdout] (default task-33) listScenData :data n°6, name :MsgFromDblinkPckts, legend
    10:20:42,758 INFO  [stdout] (default task-33) listScenData :data n°7, name :MoreDataDblinkPckts, legend
    10:20:42,759 INFO  [stdout] (default task-33) listScenData :data n°8, name :No Data, legend
    10:20:42,759 INFO  [stdout] (default task-33) nb de DataToPost 8
    10:20:42,759 INFO  [stdout] (default task-33) Java Time Elap. Time SqlnetMsgFromDblink SqlnetMoreDataDblink
    10:20:42,759 INFO  [stdout] (default task-33) onJeuscenChosen finish
    10:21:02,602 INFO  [stdout] (default task-35) MBStatistics : initMBStat finish
    10:21:02,620 INFO  [stdout] (default task-35) listScenData : data n°1, name :No Data, legende
    10:21:02,621 INFO  [stdout] (default task-35) listScenData : data n°2, name :No Data, legend
    10:21:02,621 INFO  [stdout] (default task-35) listScenData : data n°3, name :No Data, legend
    10:21:02,621 INFO  [stdout] (default task-35) listScenData : data n°4, name :No Data, legend
    10:21:02,621 INFO  [stdout] (default task-35) listScenData : data n°5, name :No Data, legendf
    10:21:02,621 INFO  [stdout] (default task-35) listScenData : data n°6, name :No Data, legend
    10:21:02,622 INFO  [stdout] (default task-35) listScenData : data n°7, name :No Data, legend
    10:21:02,622 INFO  [stdout] (default task-35) listScenData : data n°8, name :No Data, legend
    10:21:02,622 INFO  [stdout] (default task-35) selectedData : data n°1, name :No Data, legende
    10:21:02,622 INFO  [stdout] (default task-35) selectedData : data n°5, name :No Data, legendf
    10:21:02,622 INFO  [stdout] (default task-35) nb de DataToPost 2
    10:21:02,623 WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (default task-35) #{mBStatistics.createChart()}: java.lang.NullPointerException
    Si vous avez une solution ou une idée pour contourner le problème, cela m'aiderait beaucoup.
    J'ai du mal à identifier la cause de cette régénération.

    Merci !

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Le comportement est normal compte tenu du scope @RequestScoped.
    L'instance de l'objet ne survivant pas à la requête http, il le recréé à chaque demande.

    Comme tu utilises l'injection JSF plutôt que CDI, je te suggère d'utiliser le scope @ViewScoped.
    Là, tant que tu restes sur la page, l'objet existe.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Merci OButterlin de ton aide.

    Il y a du mieux et il faut aussi que je modifie cette option sur la classe de résultat pour ne pas avoir de réinitialisation ??

    Du coup, j'ai d'autres erreurs qui apparaissent sur ma page de résultat.

    J'utilise dans ma page de génération de graphiques MBAnalVar

    @ManagedProperty("#{mBStatistics}")
    private MBStatistics mBstat;

    pour récupérer des éléments

    listScen = new ArrayList<Scenario>();
    listScen = mBstat.getListScenFinal();

    listResultimes=mBstat.getListSelResultimes();
    listNetworks=mBstat.getListSelNetwork();
    varyingParam=mBstat.getVarParameter();

    legend = mBstat.getLegend();

    et cela a pour effet de me relancer la méthode init() de MBStatistics.

    Donc là, ma méthode createChart de MBStatistics s'effectue complètement mais, j'ai encore une réinitialisation de la page à la fin.

    MBAnalVar
    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
     
    @ManagedBean
    @ViewScoped
    public class MBAnalVar implements Serializable {
     
    	private static final long serialVersionUID = 1L;
     
    	 ...
     
    	///////////////////////////////////////////////////////////
    	// List of Scenarios and list of times and networks results 
    	// retrieved from MBVariation, the varying parameter too
    	private List<Scenario> listScen;
    	private List<String> listResultimes;
    	private List<String> listNetworks;
    	private String varyingParam;
     
            ...
     
    	@ManagedProperty("#{mBStatistics}")
    	private MBStatistics mBstat;
     
    	@PostConstruct
    	public void init() {
     
     
    		listScen = new ArrayList<Scenario>();
    		listScen = mBstat.getListScenFinal();
     
    		listResultimes=mBstat.getListSelResultimes();
    		listNetworks=mBstat.getListSelNetwork();
    		varyingParam=mBstat.getVarParameter();
     
    		legend = mBstat.getLegend();
     
     
    		///////////////// TEST
    		System.out.println("TEST recup mBStat");
    		System.out.println("Var param "+varyingParam);
    		System.out.println("Resultimes nb :"+listResultimes.size());
    		System.out.println("Netwqork nb :"+listNetworks.size());
    		System.out.println("ListScenFinal nb :"+listScen.size());

    En console :
    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
     
    11:37:07,570 INFO  [stdout] (default task-9) Jeuscen SDU16-F99000
    11:37:07,570 INFO  [stdout] (default task-9) varParameter : fetch
    11:37:07,570 INFO  [stdout] (default task-9) X axis :<varying parameter>
    11:37:07,570 INFO  [stdout] (default task-9) listScenFinal nb scen 9
    11:37:07,571 INFO  [stdout] (default task-9) MBStatistics : createChart finish
    11:37:07,611 INFO  [stdout] (default task-9) MBStatistics : initMBStat finish
    11:37:07,613 INFO  [stdout] (default task-9) TEST recup mBStat
    11:37:07,613 INFO  [stdout] (default task-9) Var param null
    11:37:07,613 INFO  [stdout] (default task-9) Resultimes nb :0
    11:37:07,613 INFO  [stdout] (default task-9) Netwqork nb :0
    11:37:07,613 INFO  [stdout] (default task-9) ListScenFinal nb :0
    11:37:07,613 INFO  [stdout] (default task-9) MBAnalVar : Recup de MBStatistics OK
    11:37:07,613 INFO  [stdout] (default task-9) MBAnalVar : varyingParam null
    ...
    Merci

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Normalement, il ne devrait le faire qu'une fois si ton autre bean est lui aussi en @ViewScoped...
    Ceci dit, l'injection de dépendance va te faire la création de l'objet et tout ce qui s'en suit, je te suggère de récupérer une référence sur l'objet cible par son nom.
    J'utilise ce mécanisme (qui a en plus l'avantage d'autoriser des dépendances circulaires)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public Object managedBeanResolver(String name)
    {
        try
        {
            FacesContext facesContext = FacesContext.getCurrentInstance(); 
            ELContext elContext = facesContext.getELContext();
            return facesContext.getApplication().getELResolver().getValue(elContext, null, name);
        }
        catch (Exception e)
        {
            getLogger().log(Level.SEVERE, e.toString());
        }
        return null;
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    OK, c'est tout nouveau pour moi mais je vais essayer de comprendre comment ce code fonctionne (je suis débutant sans formation "classique" ...)

    Je mettrais le code si j'y arrive.

    Merci

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    A vrai dire, c'est très simple à mettre en œuvre.
    Tu avais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @ManagedProperty("#{mBStatistics}")private MBStatistics mBstat;
    avec le getter/setter associé...
    Tu pourras supprimer la propriété de ta classe et il te restera (si tu isoles ma méthode dans une méthode à part)
    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
    ...
    public void laMethodeQueTuExposesPartiellement()
    {
        ...
        MBStatistics mBstat = managedBeanResolver("mBStatistics");
    
        listScen = new ArrayList<Scenario>();
        listScen = mBstat.getListScenFinal();
    
        listResultimes=mBstat.getListSelResultimes();
        listNetworks=mBstat.getListSelNetwork();
        varyingParam=mBstat.getVarParameter();
    
        legend = mBstat.getLegend();
        ...
    }
    ...
    public Object managedBeanResolver(String name)
    {
        try
        {
            FacesContext facesContext = FacesContext.getCurrentInstance(); 
            ELContext elContext = facesContext.getELContext();
            return facesContext.getApplication().getELResolver().getValue(elContext, null, name);
        }
        catch (Exception e)
        {
            getLogger().log(Level.SEVERE, e.toString());
        }
        return null;
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    C'est ce que j'ai essayé de faire mais je me retrouve encore confronté au même problème.

    Dès que j'instancie mBStat avec MBStatistics mBstat= (MBStatistics) managedBeanResolver("mBStatistics");
    la méthode init() de MBStatistics est appelée.

    Cela peut-il venir du fait que je l'instancie aussi dans une méthode du PostConstruct dans MBAnalVar ?

    MBAnalVar
    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
     
    @ManagedBean
    @ViewScoped
    public class MBAnalVar implements Serializable {
     
     
    	private static final long serialVersionUID = 1L;
     
    	//////////////////////////////////////////////////
    	// Model of the scenario 
    	private CartesianChartModel time_analyse_chart;
    	//private BarChartModel time_analyse_chart;
     
    	///////////////////////////////////////////////////////////
    	// List of Scenarios and list of times and networks results 
    	// retrieved from MBVariation, the varying parameter too
    	private List<Scenario> listScen;
    	private List<String> listResultimes;
    	private List<String> listNetworks;
    	private String varyingParam;
     
    	...
     
    	@PostConstruct
    	public void init() {
     
    		System.out.println("MBAnalVar init() begin");
    		MBStatistics mBstat= (MBStatistics) managedBeanResolver("mBStatistics");
     
    		listScen = new ArrayList<Scenario>();
    		listScen = mBstat.getListScenFinal();
     
    		listResultimes=mBstat.getListSelResultimes();
    		listNetworks=mBstat.getListSelNetwork();
    		varyingParam=mBstat.getVarParameter();
     
    		legend = mBstat.getLegend();
     
    		///////////////// TEST
    		System.out.println("TEST recuperation mBStat");
    		System.out.println("Var param "+varyingParam);
    		System.out.println("Resultimes nb :"+listResultimes.size());
    		System.out.println("Netwqork nb :"+listNetworks.size());
    		System.out.println("ListScenFinal nb :"+listScen.size());
     
    ... 
                  }
     
     
     
    	public Object managedBeanResolver(String name)
    	{
    	    try
    	    {
    	    	System.out.println("MBAnalVar managedBeanResolver "+name);
    	        FacesContext facesContext = FacesContext.getCurrentInstance(); 
    	        ELContext elContext = facesContext.getELContext();
    	        return facesContext.getApplication().getELResolver().getValue(elContext, null, name);
     
    	    }
    	    catch (Exception e)
    	    {
    	    	System.out.println("Marche Pas");
    	        e.printStackTrace();
    	    }
    	    return null;
    	}

    En console :
    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:41:06,439 INFO  [stdout] (default task-30) varParameter : fetch
    16:41:06,439 INFO  [stdout] (default task-30) X axis :<varying parameter>
    16:41:06,439 INFO  [stdout] (default task-30) listScenFinal nb scen 9
    16:41:06,439 INFO  [stdout] (default task-30) MBStatistics : createChart finish
    16:41:06,492 INFO  [stdout] (default task-30) MBAnalVar init() begin
    16:41:06,493 INFO  [stdout] (default task-30) MBAnalVar managedBeanResolver mBStatistics
    16:41:06,502 INFO  [stdout] (default task-30) MBStatistics : initMBStat finish
    16:41:06,503 INFO  [stdout] (default task-30) TEST recuperation mBStat
    16:41:06,503 INFO  [stdout] (default task-30) Var param null
    16:41:06,503 INFO  [stdout] (default task-30) Resultimes nb :0
    16:41:06,505 INFO  [stdout] (default task-30) Netwqork nb :0
    16:41:06,506 INFO  [stdout] (default task-30) ListScenFinal nb :0
    16:41:06,506 INFO  [stdout] (default task-30) MBAnalVar managedBeanResolver mBStatistics.f_useFunction1
    16:41:06,508 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (default task-30) Error Rendering View[/analyseVar.xhtml]: com.sun.faces.mgbean.ManagedBeanCreationException:
    J'ai aussi essayé des méthodes parallèles comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    FacesContext context = FacesContext.getCurrentInstance();
    	  MBStatistics mBStat = (MBStatistics) context.getApplication().getExpressionFactory()
                .createValueExpression(context.getELContext(), "#{mBStat}", MBStatistics.class)
                  .getValue(context.getELContext());
    mais cela ne marche pas non plus.

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Ça peut venir du fait que tu n'as pas encore instancié ton objet MBStatistics quand tu instancies MBAnalVar...

    Pourquoi utiliser 2 ManagedBean pour une même page ? Un suffirait non ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Ca ne marche toujours pas.

    J'ai essayé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private MBStatistics mBstat;
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private MBStatistics mBstat=new MBStatistics();
    avant le PostConstruct mais toujours le même problème.

    En fait j'ai une page statistics.xhtml pour le paramètrage et une autre page analyseVar.xhtml pour la génération du graphique.

    C'est dommage, j'ai l'impression d'y être presque.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Par contre, j'échappe à l'initialisation de MBStatistics lorsque j'essaie d'utiliser ta méthode en pointant directement sur le champ concerné.
    Ca ne fonctionne pas et je ne sais pas si c'est possible de faire cela mais dans l'idée, ce serait bien d'avoir un truc du genre :

    MBAnalVar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
            private String varyingParam;
     
    	@PostConstruct
    	public void init() {
            ...
            varyingParam=(String) managedBeanResolver("mBStatistics.varParameter");
    ...
    }

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Bon, je n'y arrive vraiment pas.
    Je me demande si le fait d'utiliser des fonctions comme "update" de PrimeFaces modifie le cycle de vie de mes objets ou encore autre chose ...

    Je vais écrire un fichier en dur et le lire par la suite, même si c'est très moche.

    En tout cas je te remercie vivement OButterlin d'avoir pris du temps pour m'aider.
    Tes explications sur les différences entre RequestScoped et ViewScoped m'ont aidé et m'aideront beaucoup par la suite.

    Pour la communauté, n'hésitez pas à communiquer des pistes ou solutions, je laisse la discussion non résolue encore quelques temps.

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

Discussions similaires

  1. Transmettre des données dans une même page
    Par Detere dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/04/2008, 12h05
  2. [RegEx] Récupérer des données dans une page Web
    Par Pragmateek dans le forum Langage
    Réponses: 8
    Dernier message: 24/05/2006, 19h44
  3. [Formulaires] Traitement des données dans une autre page...
    Par sekiryou dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/03/2006, 09h08
  4. [PHP-JS] Traitement des données dans une autre page...
    Par sekiryou dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2006, 09h06
  5. Récupérer des données dans une page HTML
    Par newdelirium dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2005, 19h18

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