条件に基づいてアクションメソッドの戻り値としてビュー名を使用できるため、JSFはそれらのビューを戻り値の名前と一致させます。
ワークフローの処理は、Javaコードを使用するか、faces-config.xmlでフローを宣言することで実行できます。
Javaの例の場合:(動的navgationa)
public String yourActionMethod(){
if(condition1){
return "view1";
}else if(condition2){
return "view2";
}else if(conditionN){
return "viewN";
}
}
XMLの例:(静的ナビゲーション)
<navigation-rule>
<from-view-id>/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/welcome.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>failure</from-outcome>
<to-view-id>/failed.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
ユースケースには、動的ナビゲーション(Javaコードを使用)が適しています。
サーバー側の条件に基づいてダイアログを表示する場合は、次のようにsthを使用できます。
public void doSomething(ActionEvent actionEvent) {
RequestContext context = RequestContext.getCurrentInstance();
context.execute("dialogVar.show()");
}
ユースケースがより複雑でワークフローが複雑な場合は、Activitiを使用して、そこから出力をViewIdとして取得し、アクションメソッドに返すと、JSFがそれらをレンダリングします。
独自のステートマシンを作成してその出力を取得し、アクションメソッドでViewIdとして返すこともできます。