Условное правило навигации в JSF 2.0

Условное правило навигации в JSF 2.0

JSF 2 поставляется с очень гибким условным правилом навигации для решения сложного потока навигации по страницам, см. Следующий пример правила условного перехода:

1. Страница JSF

Простая страница JSF с кнопкой для перехода с этой страницы на страницу оплаты.

start.xhtml





    
        

This is start.xhtml

2. Управляемый Боб

Управляемый компонент, предоставляющий примеры данных для выполнения условной проверки в правиле навигации.

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. Условное правило навигации

Обычно вы объявляете простое правило навигации в файлеface-config.xml следующим образом:


    start.xhtml
    
        payment
        payment.xhtml
    

С помощью JSF 2 вы можете добавить условную проверку, прежде чем она перейдет на страницу оплаты, см. Следующее:

faces-config.xml




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

Это соответствует следующему коду Java:

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

   }

}

Код должен быть достаточно понятным.

Note
В правиле условной навигации последовательность правила навигации действительно влияет на поток навигации, всегда ставьте наивысший приоритет проверки вверху.

4. тестирование

Различные наборы данных для тестирования:

Пример 1

public class PaymentController implements Serializable {

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

Когда кнопка нажата, она попадает в критерий «paymentController.orderQty < 100» и переходит на страницу «ordermore.xhtml».

Пример 2

public class PaymentController implements Serializable {

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

Когда кнопка нажата, она попадает в критерий "paymentController.registerCompleted" и переходит на страницу "payment.xhtml".

Пример 3

public class PaymentController implements Serializable {

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

Когда кнопка нажата, она не прошла все критерии проверки и переходит на страницу «register.xhtml».

Предложение

В JSF 2.0 нет тега «else» в правиле условной навигации, хотелось бы, чтобы команда JSF могла включить тег «else» в будущую версию. Например,

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

Кроме того, он должен включать в себя несколько условных проверок, как это

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

Thought…​
Правило условной навигации JSF 2,… очень похоже на Spring Web Flow, верно? :)

Скачать исходный код

Скачать -JSF-2-Conditional-Navigation-Example.zip (11 КБ)