2010-12-01 60 views
1

Aujourd'hui, j'aimerais connaître certaines fonctionnalités du cycle de vie JSF. Permettez-moi de commencer:JSF - Une autre question sur le cycle de vie

1 - Phase 2: Appliquer les valeurs de demande - Au cours de cette phase, chaque composant dans la vue recherchera ses valeurs dans la demande et définir les nouvelles valeurs pour les

Uhm, ok agréable. Ainsi, la Vue sera construite en raison des paramètres Beans précédents. Après, il y a une vue partielle, générée avec les valeurs de la requête. (Plus tard, dans la phase 3 °, ils seront comparés). Mais, par exemple, si une valeur dans la liste des demandes est absente lors de la création de cette dernière vue? Les valeurs seront nulles?

2 - Phase 5: Appeler l'application - Une fois que toutes les valeurs de la demande ont été correctement définies pour le bean backing, les événements d'action mis en file d'attente pendant la phase de demande de demande seront traités. Dans notre cas, la méthode d'action des boutons d'envoi.

Ce n'est pas clair du tout. A ce moment j'ai (sur les haricots) les valeurs mises à jour de la phase précédente (si la validation et la demande d'application ne sont pas échouées). Ok, alors maintenant que se passe-t-il? Que signifie les événements d'action mis en file d'attente pendant la phase d'application des valeurs de demande seront traités? Cela signifie que, par exemple, si l'action est Envoyer le processus est terminé? C'est pourquoi un appel ajax, s'il n'est pas rendu dans la phase 2 °, échouera? Ou où cela échoue?

3 - Phase 6: Réponse de rendu - Dans cette phase, l'arborescence des composants sera restituée au client.

Cela signifie que la vue sur le serveur est mise à jour en utilisant les valeurs de bean mises à jour? Et, après cela, le code HTML est créé à partir de cette vue? Ou juste il fait le code HTML et enregistrer le statut Voir?

espère que vous pouvez me aider :)

Répondre

8

Phase 2: Appliquer les valeurs de demande - Au cours de cette phase, chaque composant dans la vue recherchera ses valeurs dans la demande et définir les nouvelles valeurs pour les

Uhm, ok agréable. Ainsi, la Vue sera construite en raison des paramètres Beans précédents. Après, il y a une vue partielle, générée avec les valeurs de la requête. (Plus tard, dans la phase 3 °, ils seront comparés). Mais, par exemple, si une valeur dans la liste des demandes est absente lors de la création de cette dernière vue? Les valeurs seront nulles?

Fondamentalement ce qui suit se passe sous les couvertures (ici, input est UIInput et request est HttpServletRequest):

if (input.isRendered()) { 
    String value = request.getParameter(input.getClientId()); 
    if (value != null) { 
     input.setSubmittedValue(value); 
    } 
} 

Ainsi, ils ne seront pas modifiés s'il n'y a aucun paramètre de demande. Ils ne seront pas réglés avec null et conserveront la valeur par défaut.


Phase 5: Appeler Application - Une fois que toutes les valeurs de la demande a été mis avec succès à la fève de support des événements d'action en file d'attente pendant les appliquer les valeurs de demande phase sera mis en oeuvre. Dans notre cas, la méthode d'action des boutons d'envoi.

Ce n'est pas clair du tout. A ce moment j'ai (sur les haricots) les valeurs mises à jour de la phase précédente (si la validation et la demande d'application ne sont pas échouées). Ok, alors maintenant que se passe-t-il? Qu'est-ce qui signifie que les événements d'action mis en file d'attente pendant la phase d'application des valeurs de demande seront traités? Cela signifie que, par exemple, si l'action est Soumettre, le processus est terminé? C'est pourquoi un appel ajax, s'il n'est pas rendu dans la phase 2 °, échouera? Ou où cela échoue?

Au cours de 2ème phase essentiellement ce qui suit va également se produire (ici, command est UICommand, request est HttpServletRequest et ActionEvent est ActionEvent):

if (command.isRendered()) { 
    String value = request.getParameter(command.getClientId()); 
    if (value != null) { 
     command.queueEvent(new ActionEvent(command)); // Queue for INVOKE_ACTION. 
    } 
} 

Ensuite, pendant la phase d'application Invoke, tous les événements qui sont mis en file d'attente pour la phase particulière sera invoquée.


Phase 6: réponse Rendu - Dans cette phase, l'arborescence des composants sera rendu au client.

Cela signifie que la vue sur le serveur est mise à jour en utilisant les valeurs de bean mises à jour? Et, après cela, le code HTML est créé à partir de cette vue? Ou juste il fait le code HTML et enregistrer le statut Voir?

Au cours de cette phase JSF marche à travers l'arborescence des composants et tous les composants sera codé (invoquera le Renderer de tous les composants, par défaut un moteur de rendu HTML). Pendant le codage, les valeurs seront simplement obtenues à partir du modèle. La vue en elle-même ne sera pas mise à jour.Fondamentalement:

facesContext.getViewRoot().encodeAll(); 
+0

'Premier point - OK' – markzzz

+0

' Deuxième Point': encore je ne comprends pas (phase 5). Que signifie "faire l'action"? Fondamentalement, je viens de le faire, en obtenant les valeurs de la demande et mettre dans le contexte de l'interface utilisateur (si, par exemple, l'action est «Submit» – markzzz

+0

Exécuter la méthode bean qui est déclarée dans l'attribut 'action' de la' UICommand 'component-if any Par exemple' 'h: commandButton action =" # {bean.submit} "/>' invoquera la méthode 'submit()' de 'bean' pendant la phase d'invocation de l'action Voir aussi [cet article] (http : //balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html). – BalusC

2

1 - Phase 2: Appliquer demande Valeurs

Cette phase n'a rien à voir avec le backing bean. Ici, nous traitons simplement les paramètres de la requête, et essayons de les "lier" à un composant de la vue. Pendant la phase de demande d'application, ces paramètres de requête HTTP doivent être convertis et validés avant d'être injectés dans le bean réel.

2 - Phase 5: Invoquer application

Dans JSF, ActionEvents sont gérées par ActionListeners. Lorsque vous cliquez sur le bouton, un ActionEvent est déclenché et mis en file d'attente pour être traité à une phase ultérieure. Un Actionlistener par défaut est fourni par JSF qui récupère cet ActionEvent et le traite dans la phase d'application de processus. L'ActionListener par défaut est implémenté de telle sorte qu'il évalue l'expression EL et utilise le résultat pour le transmettre à un gestionnaire d'accès de navigation. Donc, ce que vous tenez pour acquis (appuyer sur un bouton exécute l'expression EL dans l'attribut action et renvoyer vers une autre page) est en fait géré de manière interne en utilisant un ActionListener.

3 - Phase 6: réponse Rendu -

Une vue JSF est une représentation interne de l'arborescence des composants et toutes les liaisons de valeur.La représentation HTML réelle est gérée par ViewHandler.