Règle de navigation conditionnelle dans JSF 2.0

Règle de navigation conditionnelle dans JSF 2.0

JSF 2 est livré avec une règle de navigation conditionnelle très flexible pour résoudre le flux de navigation de page complexe, voir l'exemple de règle de navigation conditionnelle suivant:

1. Page JSF

Une simple page JSF, avec un bouton pour passer de cette page à la page de paiement.

start.xhtml




    
        

This is start.xhtml

2. Bean géré

Un bean géré pour fournir des exemples de données pour effectuer la vérification conditionnelle dans la règle de navigation.

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.io.Serializable;

@ManagedBean
@SessionScoped
public class PaymentController implements Serializable {

    private static final long serialVersionUID = 1L;

    public boolean registerCompleted = true;
    public int orderQty = 99;

    //getter and setter methods
}

3. Règle de navigation conditionnelle

Normalement, vous déclarez la règle de navigation simple dans le "faces-config.xml" comme ceci:


    start.xhtml
    
        payment
        payment.xhtml
    

Avec JSF 2, vous pouvez ajouter une vérification conditionnelle avant de passer à la page de paiement, voir ce qui suit:

faces-config.xml



    
        start.xhtml
        
            payment
            #{paymentController.orderQty < 100}
            ordermore.xhtml
        
        
            payment
            #{paymentController.registerCompleted}
            payment.xhtml
        
        
            payment
            register.xhtml
        
    

C'est égal au code Java suivant:

if (from-view-id == "start.xhtml"){

   if(from-outcome == "payment"){

      if(paymentController.orderQty < 100){
      return "ordermore";
      }else if(paymentController.registerCompleted){
      return "payment";
      }else{
      return "register";
      }

   }

}

Le code devrait être suffisamment explicite.

Note
Dans la règle de navigation conditionnelle, la séquence de la règle de navigation affecte le flux de navigation, placez toujours la priorité de vérification la plus élevée en haut.

4. Essai

Différents ensembles de données pour les tests:

Exemple 1

public class PaymentController implements Serializable {

    public boolean registerCompleted = true;
    public int orderQty = 99;
    ...

Lorsque le bouton est cliqué, il atteint le critère «paymentController.orderQty < 100» et se déplace vers la page «ordermore.xhtml».

Exemple 2

public class PaymentController implements Serializable {

    public boolean registerCompleted = true;
    public int orderQty = 200;
    ...

Lorsque le bouton est cliqué, il atteint le critère "paymentController.registerCompleted" et passe à la page "payment.xhtml".

Exemple 3

public class PaymentController implements Serializable {

    public boolean registerCompleted = false;
    public int orderQty = 200;
    ...

Lorsque le bouton est cliqué, il a échoué à tous les critères de vérification et passer à la page "register.xhtml".

Suggestion

Dans JSF 2.0, il n'y a pas de balise "else" dans la règle de navigation conditionnelle, je souhaite que l'équipe JSF puisse inclure la balise "else" dans la prochaine version. Par exemple,

   
    start.xhtml
    
        payment
        #{paymentController.orderQty < 100}
            ordermore.xhtml
        #{paymentController.registerCompleted}
            payment.xhtml
        
            register.xhtml
    
   

De plus, il devrait également inclure la vérification conditionnelle multiple, comme ceci

   
    start.xhtml
    
        payment
        #{paymentController.orderQty < 100} && #{paymentController.xxx}
            ordermore.xhtml
        #{paymentController.registerCompleted}
            payment.xhtml
        
            register.xhtml
    
   

Thought…​
Règle de navigation conditionnelle JSF 2,… assez similaire avec Spring Web Flow, non? :)

Télécharger le code source

Téléchargez-le -JSF-2-Conditional-Navigation-Example.zip (11 Ko)