JSF 2.0の条件付きナビゲーション・ルール

JSF 2.0の条件付きナビゲーションルール

JSF 2には、複雑なページナビゲーションフローを解決するための非常に柔軟な条件付きナビゲーションルールが付属しています。次の条件付きナビゲーションルールの例を参照してください。

1. JSFページ

このページから支払いページに移動するボタンを備えた単純なJSFページ。

start.xhtml




    
        

This is start.xhtml

2. マネージドBean

ナビゲーションルールで条件チェックを実行するためのサンプルデータを提供するマネージドBean。

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. 条件付きナビゲーションルール

通常、次のように「faces-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(11KB)