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)