問題タブ [flow-scope]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jsf - JSF フローを開始してパラメータを渡すにはどうすればよいですか?
私は Java プログラミングの世界に不慣れで (プログラミングではありません)、問題を解決しようとして首まで両足で飛び込みました。
現在、次のようなリンクを作成している JSF 2.2 ページがあります。
/folder1/destination.jsfはいくつかの作業を実行してから/anotherfolder/destination2.jsfにジャンプし、ジャンプで Bean を失いました。Bean を 2 番目のページに渡したいのですが、JSF 2.2 FlowScoped Bean を使用すると問題が解決すると考えました。
次の FlowBuilder を作成しました。
destination.jsf のバッキング Bean は、次のようにインスタンス化されます。
私の問題は、フローを開始してパラメーターを渡す方法を理解しようとしていることです。
それを行う方法またはこの問題を解決するためのより良い方法についての提案をいただければ幸いです。
環境: JSF 2.2、Java EE 7、EclipseLink、Oracle Weblogic 12.1.3
glassfish-4.1 - Flowscope を Glassfish 4.1 に移行する
glassfish 4.0 では、@flowscope を使用する動作中の JSF アプリケーションがあります。フロー定義の例は次のとおりです。
Glassfish 4.1に同梱されているnetbeans 8.02にアップグレードしました。ソース コードでは、いくつかのインポートを変更する必要がありましたが、その他の変更はありません。フロースコープが機能しなくなりました。サーバーログに関連するエラーはありませんでした。フロー注釈は単純に破棄されているように思えます。なにか提案を ?
ありがとう
jsf - FlowScoped でデフォルト以外の開始ノードを設定するにはどうすればよいですか?
アンヘル・レナードの本からの抜粋、
<view tag>
: タグ内にネストされ<flow-definition>
、フロー ノードを表す JSF ページを示します。明示的な ID を各ページ (Facelet) パスに関連付けます (さらに、ID で各ページを参照できます)。ページ パスはタグにマップされ、<vdl-document>
タグにネストされ<view>
ます。このタグの存在はオプションですが、慣例として、少なくとも<view>
開始ノード (開始ページ) を示すタグが存在します。特に、デフォルトのもの以外に別の開始ノードを設定する場合は、フローと同じ名前 (ID) のフロー。さらに、オプションの<start-node>ID</start-node>
タグを使用して、の ID を示すことができます。<view>
カスタム開始ページをマップするタグ。別の方法として、タグの id 属性の値をフロー ID として設定し、カプセル化されたタグのコンテンツをカスタム開始ページのパスとして設定することによって、フローの開始ノードを示すことができます。フロー ID を参照すると、JSF はそのページに移動し、自動的にフローに入ります。
webapp
次のように、ディレクトリに関連する4つのページがあるとします。
著者は、この設定を次のように提案していますfaces-config.xml
。
実際に実験してみてわかったのは、
同じ著者によって提唱されているようにオプションです。
これで十分です (id
フローを作成する必要がある JSF ビューと同じ名前の属性)。
さらに、フローは、id
属性 <flow-definition id="registration">
が JSF ビューの名前と正確に一致する場合にのみ作成されます。つまり、次のようになります。
registration
.xhtml
同じ抜粋の一部を繰り返す:
...少なくとも、
<view>
開始ノード (開始ページ) を示すタグが存在します。特に、 をフローとして使用するフロー内のページで表される のset another start node
ほかに 必要な場合。さらに、オプションのタグを使用して 、カスタム開始ページをマップするタグのを示すことができます。default one
same name (ID)
<start-node>ID</start-node>
ID
<view>
はるかに簡単な言葉で言えば、彼はこのように同じ内にネストして行うことを提案しています<flow-definition>
。
index.xhml
しかし、からへ行くことは返されconfirm.xhtml
ないことがわかりますtrue
index.xhtml
からにナビゲートするときconfirm.xhtml
など。
助言がありますか?
jsf - JSF フロー - 暗黙的なナビゲーションが機能しない
私はJSFフローを始めています。このチュートリアルhttp://courses.coreservlets.com/Course-Materials/pdf/jsf/jsf2/JSF-2.2-Faces-Flow-1.pdf、ページ 6-12 に記載されているとおりに実行しています。
チュートリアルのように、暗黙のナビゲーションは機能しません。index.xhtml に移動し、commandButton をクリックして sampleFlow に移動すると、nullPointerException が発生します。更新/F5 を押すと、フローページが読み込まれます。次に、ページ A とページ B のリンクを使用できます。しかし、index, sampleFlow-return を使用してフローの外に移動したいときはいつでも、同じスタックを取得します。
Glassfish ログ
次のような構造の単純なアプリケーションを作成しました。
各 *.xhtml ページには、同じコマンド ボタンのセットが含まれています。
チュートリアルで述べたように、私の sampleFlow-flow.xml は空です。
Glassfish 4.1.1でNetbeans 8.1を実行しています
jsf - @FlowScoped Bean のスレッドセーフ
@FlowScoped Bean を使用して小さな実験を行いました。その目的は、私が理解しているように、「ウィザード型」の Web アプリケーションの作成を容易にし、一連のページでデータを徐々に蓄積し、すべてのデータの準備ができたら、書き込みます。それを永続ストレージに保存します (これは単なる例です。もちろん、中間ステップで永続ストレージに書き込むことを妨げるものは何もありません)。私が見たように、@FlowScoped Bean への呼び出しは同期されていないため、原則として、Bean に保存されているデータが破損する可能性があります (二重送信を行うか、他の方法でほぼ同時に 2 つの HTTP 要求を起動することにより、 Bean のメソッドを呼び出す)。これは、呼び出しが同期される @ConversationScoped Bean とは異なります。
私を困惑させているのは、 @SessionScoped Bean について、 @SessionScoped Bean へのアクセスを同期する必要性について話しているリンクをいくつか見つけたことです (または、めったに変更されないユーザーデータを除いて、それらをまったく使用しないことをお勧めします)。 @FlowScoped Bean についてそのようなものは見つかりませんでした。
@FlowScoped Bean を使用するための「ベストプラクティス」と見なされるものは何ですか? 何か不足していますか?
編集
@FlowScoped は、少なくとも私には、Spring WebFlow によって部分的に動機付けられているように見えます。Spring WebFlow にはある程度の経験があり、私が知っているように、JSF 2 との統合を提供します (すべての JSF 2.2 機能が実装されているわけではありませんが、たとえば、PrimeFaces が使用できるようです)。Spring WebFlow + JSF が実際に「実世界」のアプリケーションで使用されており、フロー スコープ オブジェクトのスレッド セーフの問題が二重送信の問題とともにエレガントに処理されていることを私は知っています (フロー実行 ID は各 HTTP 要求で提供する必要があり、 Spring WebFlow の「アクション」メソッドを呼び出す HTTP リクエストの後に期限切れになり、新しいものが返されます。したがって、同じユーザーとフロー ID に対して複数の「アクション」メソッドを同時に呼び出すことはできません)。
したがって、@FlowScoped Bean を使用してアプリケーションの「フロー」を構築したい場合 (Spring WebFlow を使用せずに)、JSF 2.2 の場合のベストプラクティスは何かを理解したいと思います。@FlowScoped Bean へのアクセスを自分で同期する必要がありますか、それともそのような問題に対処するための標準的な方法がありますか?