問題タブ [prerenderview]
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 - f:viewAction / preRenderView と PostConstruct をいつ使用するか?
f:viewAction
ページのデータを初期化するためにまたはpreRenderView
イベントを使用して、@PostConstruct
注釈を使用する必要があるのはいつですか? バッキング Bean のスコープのタイプに基づいて、どちらか一方を使用する根拠はありますか。たとえば、バッキング@RequestScoped
Beanが同じ効果をもたらしますか?f:viewAction
preRenderView
@PostConstruct
f:viewAction または preRenderView
また
@PostConstruct
jsf-2 - ポストバックごとに段階的に呼び出される PreRenderView
の実行順序と回数に問題がありf:event type="preRenderView"
ます。
ここでの検索中に、BalusC からの通常の回答として、これと私の問題に関連するこの投稿を見つけましたが、それでも私には 2 つの質問が残っています。
f:event type="preRenderView"
テンプレート ファイル (すべてのビューに適用されるユーザー状態のチェックなどの一般的なタスクを管理するため) に 1 つを配置し、各ビュー (ビュー固有の初期化を処理するため) に別のファイルを配置するとf:event type="preRenderView"
、なぜビューからリスナー メソッドが呼び出されるのか疑問に思います。テンプレートからのものの前に。提案どおりに全体を配置する
<f:metadata><f:event [..] /></f:metadata>
とui:define
、ログインページからそのページにリダイレクトした後に2回呼び出されますが、1回だけ呼び出された後、1レベル上に配置するui:composition
と。
更新: 例
次の例は、上記の動作を示しています。
これは、すべてのビューのハンドラーで共通メソッドを呼び出すイベントtemplate_test.xhtml
のリスナーを含むテンプレート ファイルです。preRenderView
これはビュー ファイルで、ハンドラーでビュー固有のメソッドを呼び出すイベントtest.xhtml
のリスナーpreRenderView
と、ハンドラー メソッドを介してリダイレクトするコマンド ボタンも含まれています。
TestHandler.java
これは、3 つのメソッドを含むハンドラ クラスです。
テストページをリクエストすると、Tomcat ログに次のように表示されます。
これはノーを示しています。1、ビューからのイベントハンドラーがテンプレートからのイベントハンドラーの前に呼び出され、いいえ。2、ビューからのイベント ハンドラーが 2 回呼び出されること。
また、ページがリダイレクトによって要求された場合に何が起こるかを示す 3 番目のポイント (同じページへのリダイレクトを含むボタンを含めた理由) も示しています。個々のページはさらに何度も呼び出されます。
どちらもいいえ。2 と 3 は、メタデータ セクション全体を の上に置くかui:define
、URL に含まれていないビューのメタデータ セクションにダミー パラメータを追加することで回避できます。
誰かがこれらのケースの理由を教えてもらえますか?
jsf-2 - preRenderView リスナー メソッドでナビゲーションを実行する方法
<f:metadata>、<f:viewParam>、および <f:viewAction> は何に使用できますか?
レンダリング前のビュー イベント リスナーがあります。
次のメソッドを呼び出します。
および次のナビゲーション ルール:
ただし、ナビゲーションは実行しません。次のようにコマンドボタンを使用すると機能します。
jsf-2 - からのデータpreRenderView イベント中にフラッシュスコープから取得されたものは、ページネーションまたはソートが実行されると失われます
私はページング可能でソート可能<p:dataTable>
です:
そのデータは、イベント中にフラッシュ スコープから@ViewScoped
Bean に取得されます。preRenderView
ページネーションまたはソートを実行すると、データが失われます。これはどのように発生し、どうすれば解決できますか?
ajax - preRenderView はすべての ajax リクエストで呼び出されます
リンクをたどるjqueryウェイポイントとjsfを使用して無限スクロールを実装しています。無限スクロールが必要な xhtml の 1 つを prerender しました。ここで、ウェイポイントが ajax リクエストを送信するので、スクロールごとに prerender を呼び出しているのはなぜですか。これは、ページ全体が更新されていることを意味します。これを解決する方法を教えてください。
ajax - commandLink をクリックすると、preRenderView が再度呼び出されます
私の facelet には、以下の commandLink があります。
これは、バッキング Bean にあるものです。
commandLink をクリックしたら、exportReport メソッドを実行したいと思います。しかし、ここで起こっていることは、メソッドを実行した後、再び preRender を実行しようとしているということです。フォーム全体を再度レンダリングしたくありません。私がここでやっている間違いは何ですか?
redirect - JSF 2は、戻るボタンまたはURLコピーペーストの最初のページにリダイレクトします(認証は関係ありません)
自己登録を使用してアカウントを作成するために使用される JSF 2.0 アプリケーションがあります。最初のページには、名前、電子メール、uid などのフィールドがあります。一般的な登録では、確認ページ (他のカスタム ページとその間のページ) と最終的な成功ページが表示されます。各ページは、faces-redirect=true を使用して JSF でレンダリングされるため、プロセス全体で 3 ~ 4 ページ (facelets) になります。このアプリケーションでは、中間ページ/確認ページ/最終ページなどを表示するために SessionScoped バッキング Bean を使用します。登録が完了したら、セッションから SessionScope Bean をクリアし、セッションを無効にします。
問題は次のとおりです。確認ページ/中間ページなどには、ユーザーが最初のページから入力したユーザーの詳細が表示されます (バッキング Bean の EL を使用: #sessionBean.firstName など)。そのため、ユーザーがこの URL (host/appName/confirmationPage.xhtml) をブラウザーに直接入力すると、ページは空白の値で読み込まれます (ユーザーが最初のページに直接移動しなかったため)。また、登録が完了した後、ユーザーが [戻る] ボタンをクリックすると、空白の値が表示されます (no-cache がフィルター クラスで明示的に設定されているため、ここではキャッシュは使用されませんが、これは正しい動作です)。
firstName などが存在しない場合、ユーザーを強制的に最初のページに移動させるにはどうすればよいですか。つまり、ユーザーがページに到達したとき、ユーザーがこのセッションの最初のページからのみこのページに到達したことを確認しますか?
フィルター クラスを使用する必要がありますか? それとも、prerenderview イベントを使用して空白の値をチェックし、それらを最初のページにリダイレクトする必要がありますか? 認証がないため、ここには「ユーザーログイン」はありません。これは一般的なユースケースだと思います.JSFにベストプラクティスがあるかどうか知りたいです.
jsf - preRenderView エラーでの jsf ディスパッチ
edit.xhtml に
バッキング Bean 内
ディスパッチ時にブラウザに適切なページが表示されますが、Tomcat ログではスタックトレースを下回ります。スタックトレースを防ぐにはどうすればよいですか? 他のイベントを使用する必要がありますか? 他の方法で発送する必要がありますか?
tomcat からのスタックトレース: