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 :

[RichFaces] Extême lenteur


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Rizzen
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 115
    Par défaut [RichFaces] Extême lenteur
    Bonjour

    Je suis à la recherche de conseil, je développe une application JSF 1.2 / RichFace et je constate malheureusement de gros ralentissement au fur et à mesure que mon arraylist de données contient des données. J’utilise des drag and drop et Context Menu pour modifier mes données ou en ajouter.

    Je voudrais savoir s’il y a des choses à éviter au niveau des reRender ou de l’affichage pour ne pas ralentir le rendu.

    Et si vous avez d’autre conseil.

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Bonjour,

    Pourrais-tu donner un peu plus d'informations ?
    De quelle ArrayList parles tu ? C'est une ArrayList maintenue par un bean ? Qui va la remplir ? Un accès à une base de données ?

    Que contient tes pages JSF ?
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre confirmé Avatar de Rizzen
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 115
    Par défaut
    J'ai un arbre contenant des activités, chaque activité doit être dropable dans une zone correspondant à un jour.

    Ma zone d'affichage correspond à un mois et il est possible de naviguer entrre les mois. Actuellement ce n'est qu'une maquette il n'y a aucune interaction avec base de données.
    Chaque jour est diviser en 5 zones : la date et 4 zone distinct de drop. Ce qui me permet de placer une activité à 0,50,75, 100% de la journée et je le fais évoluer grasse au context Menu.

    Voila l'include de ma zone ou je peux dropper mes activiter
    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
     
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
    <%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
     
     
    <script type="text/javascript">
    function getConfirmBox(activeConfirmBox)
    {
    	if(activeConfirmBox)
    	{
    		Richfaces.showModalPanel('confirmBoxDate',{width:430, top:200})
    	}
    }
    function getDateBox(confirm)
    {
    	if(confirm)
    	{
    		Richfaces.showModalPanel('demandeBoxDupplique',{width:400, top:200})
    	}
    }
    </script>
     
    <% /* Liste déroulante pour choisir la date */ %>
    <p>
    	<h:selectOneMenu value="#{craBean.moisCourant }" id="selectMois">
    		<f:selectItems value="#{craBean.mois}" />
    		<a4j:support event="onchange" reRender="ZoneDrop, selectMois, myCalendarDebut, myCalendarFin" actionListener="#{craBean.processModifDateCra}" 
    		oncomplete="getConfirmBox(#{craBean.modifActive})"/>
    	</h:selectOneMenu>
     
    	<h:selectOneMenu value="#{craBean.anneeCourante }" id="selectAnnee">
    		<f:selectItems value="#{craBean.annees}" />
    		<a4j:support event="onchange" reRender="ZoneDrop, selectAnnee, myCalendarDebut, myCalendarFin" actionListener="#{craBean.processModifDateCra}" 
    		oncomplete="getConfirmBox(#{craBean.modifActive})"/>
    	</h:selectOneMenu>
    </p>
     
     
    <% /* Boucle d'affichage des zone de saisie du CRA avec la date */ %>
    <rich:dataGrid value="#{craBean.zoneCras}" var="zone" columns="10"
    	cellpadding="0" cellspacing="0" columnClasses="tdZone" id="ZoneDrop"
    	border="0">
     
    	<% /* Affichage de la date */ %>
    	<rich:panel rendered="#{zone.rendererDate}" style="#{zone.style}">
    		<h:outputText value="#{zone.jourActiviteToString}"
    			style="position:relative;top:-10px;"></h:outputText>
    	</rich:panel>
     
    	<% /* Affichage des des zones de saisie (de drop) */ %>
    	<rich:panel style="#{zone.style}#{zone.styleBG}"
    		rendered="#{zone.rendererDrop}">
     
    		<% /* Affichage du libéllè si activité présente */ %>
    		<h:outputText value="#{zone.libelle}"
    			style="position:relative;top:-10px;left:-3px;"></h:outputText>
     
    		<% /* Suport de la fonctionnalité de drop : définition du listener et de la zone */ %>
    		<rich:dropSupport acceptedTypes="activite"
    			dropListener="#{craBean.processDrop}" reRender="ZoneDrop, selectMois, selectAnnee"
    			dropValue="#{zone.dropValue}">
    		</rich:dropSupport>
     
    		<% /* Menu sur clic Droit */ %>
    		<rich:contextMenu event="oncontextmenu" attached="true"
    			rendered="#{zone.rendererMenu}" submitMode="ajax">
     
    			<% /* Supprimer */ %>
    			<rich:menuItem submitMode="ajax" value="Supprimer"
    				actionListener="#{craBean.processMenu}" reRender="ZoneDrop">
    				<a4j:actionparam assignTo="#{craBean.paramMenu}"
    					value="#{zone.dropValue}" name="supprimer" />
    			</rich:menuItem>
     
    			<% /* Duppliquer */ %>
    			<rich:menuItem submitMode="ajax" value="Duppliquer" actionListener="#{craBean.selectDate}" 
    			oncomplete="getDateBox(true)" reRender="myCalendarDebut, myCalendarFin">
    				<a4j:actionparam assignTo="#{craBean.paramMenu}" 
    					value="#{zone.jourActiviteToString}" name="#{zone.dropValue}" />
    			</rich:menuItem>
     
    			<% /* 25% */ %>
    			<rich:menuItem submitMode="ajax" value="25%"
    				actionListener="#{craBean.processMenu}" reRender="ZoneDrop">
    				<a4j:actionparam assignTo="#{craBean.paramMenu}"
    					value="#{zone.dropValue}" name="25" />
    			</rich:menuItem>
     
    			<% /* 50% */ %>
    			<rich:menuItem submitMode="ajax" value="50%"
    				actionListener="#{craBean.processMenu}" reRender="ZoneDrop">
    				<a4j:actionparam assignTo="#{craBean.paramMenu}"
    					value="#{zone.dropValue}" name="50" />
    			</rich:menuItem>
     
    			<% /* 75% */ %>
    			<rich:menuItem submitMode="ajax" value="75%"
    				actionListener="#{craBean.processMenu}" reRender="ZoneDrop">
    				<a4j:actionparam assignTo="#{craBean.paramMenu}"
    					value="#{zone.dropValue}" name="75" />
    			</rich:menuItem>
     
    			<% /* 100% */ %>
    			<rich:menuItem submitMode="ajax" value="100%"
    				actionListener="#{craBean.processMenu}" reRender="ZoneDrop">
    				<a4j:actionparam assignTo="#{craBean.paramMenu}"
    					value="#{zone.dropValue}" name="100" />
    			</rich:menuItem>
    		</rich:contextMenu>
    	</rich:panel>
    </rich:dataGrid>
    Pour charger ma zone je crée une LinkedList de zone (on m'a conseillé de remplacer mon ArrayList par une LinkedList).

    Voilà ma mèthode de chargement de la list

    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
    public LinkedList<ZoneCra> affichageCra(Integer annee, Integer mois, Integer nbJourPeriode)
    	{
    		int decallageTab = (nbJourPeriode / 2);
    		//Nombre de jour afichés
    		if(nbJourPeriode % 2 != 0)
    		{
    			decallageTab = (nbJourPeriode / 2)+1; 
    		}
     
     
    		LinkedList<ZoneCra> zoneCras = new LinkedList<ZoneCra>();
    		LinkedList<ZoneCra> tempArray = new LinkedList<ZoneCra>();
    		int i = 0;
    		int k = 5;
     
    		while (i < nbJourPeriode) {
    			String tab[] = { "", "a", "b", "c", "d" };
    			for (int j = 0; j <= 4; j++) {
    				GregorianCalendar calendar = new java.util.GregorianCalendar(annee, mois, 1 + i);
    				ZoneCra maZone = new ZoneCra();
     
    				if (i < 10) {
    					maZone.setDropValue("zone0" + i + tab[j]);
    					maZone.setAfficheAct("afficheAct0" + i + tab[j]);
    				} else {
    					maZone.setDropValue("zone" + i + tab[j]);
    					maZone.setAfficheAct("afficheAct" + i + tab[j]);
    				}
    				if (j != 0) {
    					maZone.setJourActivite(calendar.getTime());
    					switch (j) {
    					case 1:
    						maZone.setStyle("border-right:0px;width:60px;height:15px;");
    						break;
    					case 2:
    						maZone.setStyle("border-left:0px;width:60px;height:15px;");
    						break;
    					case 3:
    						maZone.setStyle("border-right:0px;width:60px;height:15px;");
    						break;
    					case 4:
    						maZone.setStyle("border-left:0px;width:60px;height:15px;");
    						break;
    					}
     
    					maZone.setJourActivite(calendar.getTime());
    					SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
    					maZone.setJourActiviteToString(sdf.format(calendar.getTime()));
    					maZone.setRendererDate(false);
    					maZone.setRendererDrop(true);
    					maZone.setRendererMenu(false);
    				} else {
    					maZone.setStyle("border:0px;width:140px;height:15px;");
    					SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMMM");
    					maZone.setJourActiviteToString(WordUtils.capitalize(sdf.format(calendar.getTime())));
    					maZone.setRendererDate(true);
    					maZone.setRendererDrop(false);
    					maZone.setRendererMenu(false);
    				}
     
    				if( i < decallageTab)
    				{
    					zoneCras.add(maZone);
    				}
    				else
    				{
    					tempArray.add(maZone);
    				}
    			}
    			if( i >= decallageTab)
    			{
    				zoneCras.addAll(k, tempArray);
    				k+= 10;
    				tempArray.clear();				
    			}
    			i++;
    		}
    		return zoneCras;
    	}
    Le problème c'est que l'appli tourne normalement quand il n'y a pas trop d'activité dans la liste mais cela devient trés lent dés que le mois commence à être bien remplit.

    Au niveau des traitement serveur j'ai regardé que ce soit sur le drop ou les mises à jour du temps de l'activité. Cela est trés rapide voir même instantané mais le réactualisation des données est beaucoup plus longue.

    Si vous avez besoin d'autre information.

    Je vais tester avec un double list pour avoir moins de donnée à réafficher en cas de maj. et je vais passer par une Liste de ligne contenant des zone plustôt qu'une simple list de zone.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Par défaut
    Mon entreprise ma donnée un projet dans lequel j'utilisais richFaces

    J'ai bossé dessus 1 semaine et finalement je suis revnu à iceFaces pour la raison de ton probleme => extreme lenteur

    de plus certains de leur composant ne sont pas encore au point, il y a pas mal de probleme ( ex:sortableDatatable un truc kom ça, enfin le tableau qui permet de trier par colonnes )

    bref pas mal de souci. A mon avi il vaut mieu attendre un peut avant de ce servir de ce composant, il est encore au stade "expérimental"

  5. #5
    Membre confirmé Avatar de Rizzen
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 115
    Par défaut
    Stade expérimental je ne pense pas, on est quand même à une version 3.

    Pour l'extrême lenteur j'en suis arrivée à bout. Le problème de l'ajax c'est que plus les zones de rafraîchissement sont nombreuses et grande plus c'est long. Pour remédier à cella j'ai divisé ma Liste en 2, une pour chaque moitié du mois. Ensuite au lieu d'avoir une liste de zone j'ai une liste de ligne contenant des zones. Ce qui me permet d'avoir des listes beaucoup moins grandes. Je passe de 150 éléments à au maximum 16 éléments dans une liste.

    La deuxième étape a été de séparé au maximum les éléments pour les rendre indépendant exemple mon contextMenu je les externalisais de mes zone pour ne plus faire qu’un appel via componentControl, ce qui a pour effet de ne plus être régénéré et allège le traitement du rafraîchissement.

    Bien utilisé RichFaces reste un outils très efficace. Et avec un peu d’optimisation et de logique on arrive rapidement à améliorer le résultat.

    Je poste les codes pour ceux que ça intéresse. Et si vous avez d’autre conseil je suis toujours prenneur.

    Planning
    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
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
    <%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
     
     
    <script type="text/javascript">
    function getConfirmBox(activeConfirmBox)
    {
    	if(activeConfirmBox)
    	{
    		Richfaces.showModalPanel('confirmBoxDate',{width:430, top:200})
    	}
    }
    function getDateBox(confirm)
    {
    	if(confirm)
    	{
    		Richfaces.showModalPanel('demandeBoxDupplique',{width:400, top:200})
    	}
    }
    </script>
     
    <% /* Liste déroulante pour choisir la date */ %>
    <p>
    	<h:selectOneMenu value="#{craBean.moisCourant }" id="selectMois">
    		<f:selectItems value="#{craBean.mois}" />
    		<a4j:support event="onchange" reRender="ZoneDrop1, ZoneDrop2, selectMois, myCalendarDebut, myCalendarFin" actionListener="#{craBean.processModifDateCra}" 
    		oncomplete="getConfirmBox(#{craBean.modifActive})"/>
    	</h:selectOneMenu>
     
    	<h:selectOneMenu value="#{craBean.anneeCourante }" id="selectAnnee">
    		<f:selectItems value="#{craBean.annees}" />
    		<a4j:support event="onchange" reRender="ZoneDrop1, ZoneDrop2, selectAnnee, myCalendarDebut, myCalendarFin" actionListener="#{craBean.processModifDateCra}" 
    		oncomplete="getConfirmBox(#{craBean.modifActive})"/>
    	</h:selectOneMenu>
    </p>
     
     
     
    <h:panelGrid columns="2" columnClasses="tdZone" rowClasses="valign">
    <% /* Affichage des deux liste dans un tableaux */ %>
     
    	<% /* Boucle d'affichage des zone de saisie du CRA avec la date */ %>
    	<rich:dataGrid value="#{craBean.lignesCra1}" var="ligne" 
    		cellpadding="0" cellspacing="0" columnClasses="tdZone" id="ZoneDrop1"
    		border="0">
     
    		<h:panelGrid columns="5" columnClasses="tdZone" cellspacing="0" cellpadding="0">
     
    			<% /* Affichage de la date */ %>
    			<rich:panel style="#{ligne.style}">
    				<h:outputText value="#{ligne.dateDuJourToString}"
    					style="position:relative;top:-10px;"></h:outputText>
    			</rich:panel>
     
    			<% /* Affichage de la zoneA de saisie (de drop) */ %>
    			<rich:panel style="#{ligne.zoneA.style}#{ligne.zoneA.styleBG}">
    				<h:outputText value="#{ligne.zoneA.libelle}" style="position:relative;top:-10px;left:-3px;" />
     
    				<rich:dropSupport acceptedTypes="activite"
    					dropListener="#{craBean.processDrop}" reRender="ZoneDrop1, selectMois, selectAnnee"
    					dropValue="#{ligne.zoneA.dropValue}">
    				</rich:dropSupport>
     
    				<rich:componentControl event="onclick" for="menu1" operation="show" rendered="#{ligne.zoneA.rendererMenu}">
    			        <f:param value="#{ligne.zoneA.dropValue}" name="zone"/>
    			        <f:param value="#{ligne.id}" name="ligne"/>
    	            </rich:componentControl>
    			</rich:panel>
     
     
    			<% /* Affichage de la zoneB de saisie (de drop) */ %>
    			<rich:panel style="#{ligne.zoneB.style}#{ligne.zoneB.styleBG}">
    				<h:outputText value="#{ligne.zoneB.libelle}" style="position:relative;top:-10px;left:-3px;" />
     
    				<rich:dropSupport acceptedTypes="activite"
    					dropListener="#{craBean.processDrop}" reRender="ZoneDrop1, selectMois, selectAnnee"
    					dropValue="#{ligne.zoneB.dropValue}">
    				</rich:dropSupport>
     
    				<rich:componentControl event="onclick" for="menu1" operation="show" rendered="#{ligne.zoneB.rendererMenu}">
    			        <f:param value="#{ligne.zoneB.dropValue}" name="zone"/>
    			        <f:param value="#{ligne.id}" name="ligne"/>
    	            </rich:componentControl>
     
    			</rich:panel>
     
    			<% /* Affichage de la zoneC de saisie (de drop) */ %>
    			<rich:panel style="#{ligne.zoneC.style}#{ligne.zoneC.styleBG}">
    				<h:outputText value="#{ligne.zoneC.libelle}" style="position:relative;top:-10px;left:-3px;" />
     
    				<rich:dropSupport acceptedTypes="activite"
    					dropListener="#{craBean.processDrop}" reRender="ZoneDrop1, selectMois, selectAnnee"
    					dropValue="#{ligne.zoneC.dropValue}">
    				</rich:dropSupport>
     
    				<rich:componentControl event="onclick" for="menu1" operation="show" rendered="#{ligne.zoneC.rendererMenu}">
    			        <f:param value="#{ligne.zoneC.dropValue}" name="zone"/>
    			        <f:param value="#{ligne.id}" name="ligne"/>
    	            </rich:componentControl>
    			</rich:panel>
     
    			<% /* Affichage de la zoneD de saisie (de drop) */ %>
    			<rich:panel style="#{ligne.zoneD.style}#{ligne.zoneD.styleBG}">
    				<h:outputText value="#{ligne.zoneD.libelle}" style="position:relative;top:-10px;left:-3px;" />
     
    				<rich:dropSupport acceptedTypes="activite"
    					dropListener="#{craBean.processDrop}" reRender="ZoneDrop1, selectMois, selectAnnee"
    					dropValue="#{ligne.zoneD.dropValue}">
    				</rich:dropSupport>
     
    				<rich:componentControl event="onclick" for="menu1" operation="show" rendered="#{ligne.zoneD.rendererMenu}">
    			        <f:param value="#{ligne.zoneD.dropValue}" name="zone"/>
    			        <f:param value="#{ligne.id}" name="ligne"/>
    	            </rich:componentControl>
    			</rich:panel>
     
    		</h:panelGrid>
    	</rich:dataGrid>
     
    	<% /* Boucle d'affichage des zone de saisie du CRA avec la date */ %>
    	<rich:dataGrid value="#{craBean.lignesCra2}" var="ligne" 
    		cellpadding="0" cellspacing="0" columnClasses="tdZone" id="ZoneDrop2"
    		border="0">
     
    		<h:panelGrid columns="5" columnClasses="tdZone" cellspacing="0" cellpadding="0">
     
    			<% /* Affichage de la date */ %>
    			<rich:panel style="#{ligne.style}">
    				<h:outputText value="#{ligne.dateDuJourToString}"
    					style="position:relative;top:-10px;"></h:outputText>
    			</rich:panel>
     
    			<% /* Affichage de la zoneA de saisie (de drop) */ %>
    			<rich:panel style="#{ligne.zoneA.style}#{ligne.zoneA.styleBG}">
    				<h:outputText value="#{ligne.zoneA.libelle}" style="position:relative;top:-10px;left:-3px;" />
     
    				<rich:dropSupport acceptedTypes="activite"
    					dropListener="#{craBean.processDrop}" reRender="ZoneDrop2, selectMois, selectAnnee"
    					dropValue="#{ligne.zoneA.dropValue}">
    				</rich:dropSupport>
     
    				<rich:componentControl event="onclick" for="menu2" operation="show" rendered="#{ligne.zoneA.rendererMenu}">
    			        <f:param value="#{ligne.zoneA.dropValue}" name="zone"/>
    			        <f:param value="#{ligne.id}" name="ligne"/>
    	            </rich:componentControl>
    			</rich:panel>
     
    			<% /* Affichage de la zoneB de saisie (de drop) */ %>
    			<rich:panel style="#{ligne.zoneB.style}#{ligne.zoneB.styleBG}">
    				<h:outputText value="#{ligne.zoneB.libelle}" style="position:relative;top:-10px;left:-3px;" />
     
    				<rich:dropSupport acceptedTypes="activite"
    					dropListener="#{craBean.processDrop}" reRender="ZoneDrop2, selectMois, selectAnnee"
    					dropValue="#{ligne.zoneB.dropValue}">
    				</rich:dropSupport>
     
    				<rich:componentControl event="onclick" for="menu2" operation="show" rendered="#{ligne.zoneB.rendererMenu}">
    			        <f:param value="#{ligne.zoneB.dropValue}" name="zone"/>
    			        <f:param value="#{ligne.id}" name="ligne"/>
    	            </rich:componentControl>
    			</rich:panel>
     
    			<% /* Affichage de la zoneC de saisie (de drop) */ %>
    			<rich:panel style="#{ligne.zoneC.style}#{ligne.zoneC.styleBG}">
    				<h:outputText value="#{ligne.zoneC.libelle}" style="position:relative;top:-10px;left:-3px;" />
     
    				<rich:dropSupport acceptedTypes="activite"
    					dropListener="#{craBean.processDrop}" reRender="ZoneDrop2, selectMois, selectAnnee"
    					dropValue="#{ligne.zoneC.dropValue}">
     
    				<rich:componentControl event="onclick" for="menu2" operation="show" rendered="#{ligne.zoneC.rendererMenu}">
    			        <f:param value="#{ligne.zoneC.dropValue}" name="zone"/>
    			        <f:param value="#{ligne.id}" name="ligne"/>
    	            </rich:componentControl>
    				</rich:dropSupport>
    			</rich:panel>
     
    			<% /* Affichage de la zoneD de saisie (de drop) */ %>
    			<rich:panel style="#{ligne.zoneD.style}#{ligne.zoneD.styleBG}">
    				<h:outputText value="#{ligne.zoneD.libelle}" style="position:relative;top:-10px;left:-3px;" />
     
    				<rich:dropSupport acceptedTypes="activite"
    					dropListener="#{craBean.processDrop}" reRender="ZoneDrop2, selectMois, selectAnnee"
    					dropValue="#{ligne.zoneD.dropValue}">
    				</rich:dropSupport>
     
     
    				<rich:componentControl event="onclick" for="menu2" operation="show" rendered="#{ligne.zoneD.rendererMenu}">
    			        <f:param value="#{ligne.zoneD.dropValue}" name="zone"/>
    			        <f:param value="#{ligne.id}" name="ligne"/>
    	            </rich:componentControl>
    			</rich:panel>
     
    		</h:panelGrid>
    	</rich:dataGrid>
    </h:panelGrid>
    contextMenu
    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
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
    <%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
     
    <% /* Menu sur clic gauche */ %>
    <rich:contextMenu attached="false" id="menu1" submitMode="ajax">
     
    	<% /* Supprimer */ %>
    	<rich:menuItem value="Supprimer" actionListener="#{craBean.processMenu}" reRender="ZoneDrop1">
    		<a4j:actionparam name="supprimer" assignTo="#{craBean.paramMenu}" value="{zone}"/>
    		<a4j:actionparam name="numeroLigne" assignTo="#{craBean.idLigne}" value="{ligne}"/>
    	</rich:menuItem>
     
    	<% /* 25% */ %>
    	<rich:menuItem value="25%" actionListener="#{craBean.processMenu}" reRender="ZoneDrop1">
    		<a4j:actionparam name="25" assignTo="#{craBean.paramMenu}" value="{zone}"/>
    		<a4j:actionparam name="numeroLigne" assignTo="#{craBean.idLigne}" value="{ligne}"/>
    	</rich:menuItem>
     
    	<% /* 50% */ %>
    	<rich:menuItem value="50%" actionListener="#{craBean.processMenu}" reRender="ZoneDrop1">
    		<a4j:actionparam  name="50" assignTo="#{craBean.paramMenu}" value="{zone}"/>
    		<a4j:actionparam name="numeroLigne" assignTo="#{craBean.idLigne}" value="{ligne}"/>
    	</rich:menuItem>
     
    	<% /* 75% */ %>
    	<rich:menuItem value="75%" actionListener="#{craBean.processMenu}" reRender="ZoneDrop1">
    		<a4j:actionparam  name="75" assignTo="#{craBean.paramMenu}" value="{zone}"/>
    		<a4j:actionparam name="numeroLigne" assignTo="#{craBean.idLigne}" value="{ligne}"/>
    	</rich:menuItem>
     
    	<% /* 100% */ %>
    	<rich:menuItem value="100%" actionListener="#{craBean.processMenu}" reRender="ZoneDrop1">
    		<a4j:actionparam name="100" assignTo="#{craBean.paramMenu}" value="{zone}"/>
    		<a4j:actionparam name="numeroLigne" assignTo="#{craBean.idLigne}" value="{ligne}"/>
    	</rich:menuItem>
     
    	<% /* Duppliquer */ %>
    	<rich:menuItem value="Duppliquer" actionListener="#{craBean.selectDate}" 
    	oncomplete="getDateBox(true)" reRender="myCalendarDebut, myCalendarFin">
    		<a4j:actionparam name="dupliquer" assignTo="#{craBean.paramMenu}" value="{zone}"/>
    		<a4j:actionparam name="numeroLigne" assignTo="#{craBean.idLigne}" value="{ligne}"/>
    	</rich:menuItem>
    </rich:contextMenu>
     
     
    <% /* Menu sur clic gauche */ %>
    <rich:contextMenu attached="false" id="menu2" submitMode="ajax">
     
    	<% /* Supprimer */ %>
    	<rich:menuItem value="Supprimer" actionListener="#{craBean.processMenu}" reRender="ZoneDrop2">
    		<a4j:actionparam name="supprimer" assignTo="#{craBean.paramMenu}" value="{zone}"/>
    		<a4j:actionparam name="numeroLigne" assignTo="#{craBean.idLigne}" value="{ligne}"/>
    	</rich:menuItem>
     
    	<% /* 25% */ %>
    	<rich:menuItem value="25%" actionListener="#{craBean.processMenu}" reRender="ZoneDrop2">
    		<a4j:actionparam name="25" assignTo="#{craBean.paramMenu}" value="{zone}"/>
    		<a4j:actionparam name="numeroLigne" assignTo="#{craBean.idLigne}" value="{ligne}"/>
    	</rich:menuItem>
     
    	<% /* 50% */ %>
    	<rich:menuItem value="50%" actionListener="#{craBean.processMenu}" reRender="ZoneDrop2">
    		<a4j:actionparam  name="50" assignTo="#{craBean.paramMenu}" value="{zone}"/>
    		<a4j:actionparam name="numeroLigne" assignTo="#{craBean.idLigne}" value="{ligne}"/>
    	</rich:menuItem>
     
    	<% /* 75% */ %>
    	<rich:menuItem value="75%" actionListener="#{craBean.processMenu}" reRender="ZoneDrop2">
    		<a4j:actionparam  name="75" assignTo="#{craBean.paramMenu}" value="{zone}"/>
    		<a4j:actionparam name="numeroLigne" assignTo="#{craBean.idLigne}" value="{ligne}"/>
    	</rich:menuItem>
     
    	<% /* 100% */ %>
    	<rich:menuItem value="100%" actionListener="#{craBean.processMenu}" reRender="ZoneDrop2">
    		<a4j:actionparam name="100" assignTo="#{craBean.paramMenu}" value="{zone}"/>
    		<a4j:actionparam name="numeroLigne" assignTo="#{craBean.idLigne}" value="{ligne}"/>
    	</rich:menuItem>
     
    	<% /* Duppliquer */ %>
    	<rich:menuItem value="Duppliquer" actionListener="#{craBean.selectDate}" 
    	oncomplete="getDateBox(true)" reRender="myCalendarDebut, myCalendarFin">
    		<a4j:actionparam name="dupliquer" assignTo="#{craBean.paramMenu}" value="{zone}"/>
    		<a4j:actionparam name="numeroLigne" assignTo="#{craBean.idLigne}" value="{ligne}"/>
    	</rich:menuItem>
    </rich:contextMenu>
    Création de ma liste
    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
    public LinkedList<LigneCra> affichageCra(Integer annee, Integer mois, Integer nbJourPeriode, int liste)
    	{
    		LinkedList<LigneCra> lignesCra = new LinkedList<LigneCra>();
     
    		String setStyleA = "border-right:0px;width:60px;height:15px;";
    		String setStyleB = "border-left:0px;width:60px;height:15px;";
    		String setStyleC = "border-right:0px;width:60px;height:15px;";
    		String setStyleD = "border-left:0px;width:60px;height:15px;";
     
     
    		//Nombre de jours afichés
    		int ajustement = nbJourPeriode %2;	
    		int nombreDeLigne = (nbJourPeriode / 2) + ajustement;
    		int jourDeDepart = 1;
    		if(liste == 2)
    		{
    			//Lignes restantes
    			jourDeDepart = (nbJourPeriode / 2) +1 + ajustement;
    			nombreDeLigne = nbJourPeriode - (nbJourPeriode / 2) - ajustement; 
    		}
     
    		//Création de la liste
    		int i = 0;
     
    		while (i < nombreDeLigne) 
    		{
    			LigneCra maLigne = new LigneCra();
    			//Création de la date de la ligne
    			GregorianCalendar calendar = new java.util.GregorianCalendar(annee, mois, jourDeDepart + i);
     
    			//set de la date et style
    			maLigne.setDateDuJour(calendar.getTime());
    			maLigne.setStyle("border:0px;width:140px;height:15px;");
    			maLigne.setId(i + jourDeDepart);
     
    			//Création des 4 zones de CRA
    			String tab[] = {"a", "b", "c", "d" };
     
    			for (int j = 0; j <= 3; j++) 
    			{
    				ZoneCra maZone = new ZoneCra();
    				maZone.setRendererMenu(false);
     
    				//Formatage du chiffre à au moins deux chiffres (1 -> 01)
    				int size = 2; 
    				NumberFormat nf = NumberFormat.getInstance(); 
    				nf.setMinimumIntegerDigits(size); 
    				nf.setGroupingUsed(false); 
    				maZone.setDropValue(nf.format(jourDeDepart + i)  + tab[j]);
     
    				//Application du style
    				switch (j) 
    				{
    				case 0:
    					maZone.setStyle(setStyleA);
    					maLigne.setZoneA(maZone);
    					break;
    				case 1:
    					maZone.setStyle(setStyleB);
    					maLigne.setZoneB(maZone);
    					break;
    				case 2:
    					maZone.setStyle(setStyleC);
    					maLigne.setZoneC(maZone);
    					break;
    				case 3:
    					maZone.setStyle(setStyleD);
    					maLigne.setZoneD(maZone);
    					break;
    				}
    			} 
    			i++;
    			lignesCra.add(maLigne);
    		}
    		return lignesCra;
    	}

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

Discussions similaires

  1. [LG]Lenteur de parcours de fichier
    Par YéTeeh dans le forum Langage
    Réponses: 9
    Dernier message: 26/11/2003, 22h57
  2. [Débutant] Lenteur avec TComPort
    Par PhDt76 dans le forum C++Builder
    Réponses: 22
    Dernier message: 27/09/2003, 21h43
  3. lenteur d'affichage de requete dans un DBGrid
    Par nico27 dans le forum InterBase
    Réponses: 9
    Dernier message: 23/06/2003, 13h54
  4. [Sybase]probleme de lenteur
    Par MASSAKA dans le forum Sybase
    Réponses: 3
    Dernier message: 19/03/2003, 22h58
  5. Lenteur d'execution de Jbuilder 6
    Par Tsimplice dans le forum JBuilder
    Réponses: 6
    Dernier message: 18/12/2002, 14h41

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