Je dois effectuer des calculs très longs.
Je souhaite afficher quand même la page avec les champs résultats (des outputText par exemple), et que le bean mette à jour ce champ tout seul quand il a fini ses calculs... Est-ce possible?
Merci
Je dois effectuer des calculs très longs.
Je souhaite afficher quand même la page avec les champs résultats (des outputText par exemple), et que le bean mette à jour ce champ tout seul quand il a fini ses calculs... Est-ce possible?
Merci
Bonjour,
Si tu utilises RichFaces, tu peux utiliser le composant <a4j:poll> qui va périodiquement interroger le serveur, et mettre à jour les champs calculés en conséquence...
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
ton message n'est pas claire !
si tu veut affiché le résultat de ta méthode qui fait le calcule par exemple dans un outputText alors:
La méthode que tu appel pour faire le calcul doive retourné un null pour rafraichir la page avec les nouvelle donné
Code : Sélectionner tout - Visualiser dans une fenêtre à part Résultat : <h:outputText value="#{TonBean.resultat}" />
En fait, la méthode appelée est très longue a exécuter, en attendant qu'elle se terline, je veux tout de même afficher le champ aevc une valeur par défaut, et quand la méthode a terminé, elle change elle même la valeur du champ.
Dans mon ancien projet, ce que nous faisions, c'était d'afficher, au moment du clic, une popup d'attente (avec un joli gif animé) qui se fermait une fois le traitement affiché.
Cela se réalise facilement avec un <a4j:commandButton/> et le onclick et oncomplete...
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
C'est une bonne idée aussi, mais ce que je veux c'est bloquer le moins possible l'affichage, à la rigueur, mettre le petit gif à la place des champs en cours de calcul, et remplacer ce gif par la valeur une fois le calcul terminé.
j'ai essayé ça, mais le champ ne se met pas à jour :
manager.allSize représente la taille d'une liste en cours de remplissage
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 <a4j:region> <h:form> <a4j:poll id="poll" interval="500" enabled="true" reRender="poll,grid" /> </h:form> </a4j:region> <h:form> <h:panelGrid columns="2" width="80%" id="grid"> <h:panelGrid columns="1"> <h:outputText value="Test #{manager.allSize}"> </h:outputText> </h:panelGrid> </h:panelGrid> </h:form>
sinon tu peux ajouter une variable boolean et à la fin des calcul tu modifie sa valeur
et tu as ajoute un rendered sur les champs que tu veux afficher à la fin des calculs..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <a4j:commandButton actionListener="{bean.calculer}" reRender="area"/> <a4j:outputPanel id="area"> <h:inputText .. rendered="#{bean.finished}"/> </a4j:outputPanel>
Articles: Richfaces - JBosstools pour JSF.
En fait l'opération de calcul est lancée automatiquement dès le chargement de la page.
Il semble que mon allSize ne soit appelé qu'une seule fois, je ne comprend pas pourquoi.
c'est normal:
le getter est appelé plusieurs fois dans les phases JSF.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3<h:outputText value="Test #{manager.allSize}"> </h:outputText>
Articles: Richfaces - JBosstools pour JSF.
Oui, mais le getter devrait bien être appeler toutes les 500ms non?
Articles: Richfaces - JBosstools pour JSF.
Le problème c'est que le calcul n'est pas déclenché explicitement depuis le code JSF, mais qu'il se lance dès que le bean est créé, je ne peux donc pas affecter d'action listener à un bouton vu que je n'en ai pas.
tu peux appeler la fonction dans le constructeur du bean .
Articles: Richfaces - JBosstools pour JSF.
C'est le cas : la fonction de calcul est appelée dans le constructeur
et alors c'est quoi le problème?
Articles: Richfaces - JBosstools pour JSF.
En fait je me suis amusé à mettre une commandButton qui appelle un reRender, mais ça ne fait rien, le getter n'est pas appelé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <a4j:commandButton style="width:120px" id="control" value="Update" reRender="poll, grid"> </a4j:commandButton>
Bon, si on résume :
Dans le constructeur de mon bean j'appelle une méthode calcul() qui dure longtemps.
Cette méthode remplit une liste, ce que je veux c'est afficher la taille de la liste une fois que l'appel à calcul est terminé.
Mon poll ne poll rien du tout...
Pour être certain de ce qu'il se passe j'ai ajouté un commandButton pour rafraichir explicitement le champ, en utilisant aussi reRender.
Dans les deux cas, ça ne fonctionne pas.
fais l'appel dans le poll
Code : Sélectionner tout - Visualiser dans une fenêtre à part <a4j:poll actionListener=#{bean.action} ../>
Articles: Richfaces - JBosstools pour JSF.
L'appel à quelle méthode?
Je ne veux appeler ma méthode de calcul qu'une seule fois.
Partager