Bedingte Navigationsregel in JSF 2.0

Bedingte Navigationsregel in JSF 2.0

JSF 2 wird mit einer sehr flexiblen bedingten Navigationsregel geliefert, um den komplexen Seitennavigationsfluss zu lösen. Siehe das folgende Beispiel für bedingte Navigationsregeln:

1. JSF Seite

Eine einfache JSF-Seite mit einer Schaltfläche, mit der Sie von dieser Seite zur Zahlungsseite wechseln können.

start.xhtml





    
        

This is start.xhtml

2. Managed Bean

Eine verwaltete Bean, die Beispieldaten zur Durchführung der bedingten Überprüfung in der Navigationsregel bereitstellt.

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. Bedingte Navigationsregel

Normalerweise haben Sie die einfache Navigationsregel in der Datei „faces-config.xml“ folgendermaßen deklariert:


    start.xhtml
    
        payment
        payment.xhtml
    

Mit JSF 2 können Sie einige bedingte Prüfungen hinzufügen, bevor Sie zur Zahlungsseite wechseln.

faces-config.xml




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

Dies entspricht dem folgenden Java-Code:

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";
      }

   }

}

Der Code sollte selbsterklärend genug sein.

Note
In der bedingten Navigationsregel wirkt sich die Reihenfolge der Navigationsregel auf den Navigationsfluss aus. Stellen Sie immer die höchste Überprüfungspriorität nach oben.

4. Testen

Unterschiedliche Datensätze zum Testen:

Beispiel 1

public class PaymentController implements Serializable {

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

Wenn Sie auf die Schaltfläche klicken, werden die Kriterien "paymentController.orderQty < 100" erfüllt und die Seite "ordermore.xhtml" aufgerufen.

Beispiel 2

public class PaymentController implements Serializable {

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

Wenn Sie auf die Schaltfläche klicken, werden die Kriterien "paymentController.registerCompleted" erfüllt und die Seite "payment.xhtml" aufgerufen.

Beispiel 3

public class PaymentController implements Serializable {

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

Wenn die Schaltfläche angeklickt wird, sind alle Überprüfungskriterien nicht erfüllt und es wird zur Seite "register.xhtml" gewechselt.

Vorschlag

In JSF 2.0 enthält die bedingte Navigationsregel kein "else" -Tag. Ich wünschte, das JSF-Team könnte das "else" -Tag in die zukünftige Version aufnehmen. Zum Beispiel,

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

Darüber hinaus sollte dies auch die mehrfache bedingte Überprüfung umfassen

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

Thought…​
JSF 2 bedingte Navigationsregel,… ganz ähnlich wie beim Spring Web Flow, oder? :)

Quellcode herunterladen

Laden Sie es herunter -JSF-2-Conditional-Navigation-Example.zip (11 KB)