2

現在、JSF 2(Primefaces、CDI EJB、およびJPA)でシングルページアプリケーションを開発しています。アプリケーション(ページ)には、舞台裏でいくつかの複雑なワークフローがあります。

たとえば、ユーザーが何らかのデータを入力した場合、最初に確認を求めるダイアログが表示され、回答に応じてある種のワークフローが実行されます。ワークフロー内では、挿入されたデータまたはデータベースの値に応じて、他のダイアログがポップアップ表示される場合があります。

私の質問:

このようなワークフローエンジンを実現するためのベストプラクティスはありますか。(GoVパターンステートマシンとactivitiプロジェクトを見ただけです)

よろしく

4

3 に答える 3

1

条件に基づいてアクションメソッドの戻り値としてビュー名を使用できるため、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として返すこともできます。

于 2012-08-09T09:39:38.260 に答える
0

このブログ投稿はあなたがやりたいことに関連していると思います、そしてそれは助けになるかもしれません:

「ページフローとプロセスフロー–UIメディエーターがどのように役立つか」 http://www.bpm-guide.de/2012/04/04/pageflow-vs-process-flow-and-ui-mediator-pattern //

于 2012-08-09T20:35:06.853 に答える
0

JSF 2.2は、FacesFlowsと呼ばれるフロースコープメカニズムを提供します

これは私のニーズに合っています助けてくれてありがとう

于 2012-10-24T13:36:57.647 に答える