問題タブ [view-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 - Beanが@ViewScopedであるにもかかわらず、@ PostConstructコールバックが毎回起動するのはなぜですか?JSF
ページ上のdatatableを使用しており、バインディング属性を使用してバッキングBeanにバインドしています。これは私のコードです:-
これは私の豆です:-
ボタンをクリックするたびに@PostConstructが起動する理由を教えてください。私のBeanは@ViewScopedであるため、同じページにいる限り、1回だけ起動する必要があります。さらに、バインディング属性を削除すると、すべてが正常に機能し、@PostConstructコールバックが1回だけ発生します。では、なぜバインディング属性を使用するたびに?バインディング属性が必要で、Webサービスからのデータのフェッチなどの初期化タスクを1回だけ実行したい。私は何をすべきか?初期化タスクはどこに書くべきですか?
jsf - @ViewScoped マネージド Bean がポストバック中に何度もロードされる
jsf フェイスレットにカレンダー、エディター、fileUpload、および dataTable プライムフェイス コントロールがあります。
コードは次のとおりです。
および @ViewScoped Bean を次のように、
私の問題は、フォームのロード時およびファイルのアップロード時に SearchScriptActionBean が何度もロードされることです。Bean の古い値を保持したい。元。アップロードされたファイルが追加される scriptFiles(List)。filsList (dataTable) が更新されていません。
jsf - JSF 1.xでビュースコープのBeanを作成するには?
Web ページに 2 つのリンクがあり、1 パイントを appserver/?dept=1 にリンクし、2 つ目のリンクは appserver/?dept=2 です。次に、JSF フェーズ リスナーがあり、そこでバックエンド Bean を取得し、Bean パラメーターとして dept1 または dept2 を設定して、さまざまな部門のコンテンツをレンダリングできます。ユーザーが上記の Web ページから 2 つのウィンドウを起動すると、dept1 ウィンドウの内容が dept2 ウィンドウに移動する可能性があります。すべてめちゃくちゃ。(デスクトップ ショートカットからブラウザを起動する場合は、上記のリンクを入力します。2 つのセッションが作成され、2 つの異なるバックエンド Bean インスタンスが作成されるため、問題ありません)。
主な理由は、JSF ストア バック Bean がセッションにあるため、同じ親ウィンドウから同じセッション ID (Cookie) を共有し、同じバックエンド Bean クラス インスタンスを使用した 2 つのウィンドウです。結果のレンダリング時に、結果はどちらのウィンドウにも表示されます。
このウィンドウ クロス コンテンツの状況を回避するにはどうすればよいですか? これは、ずっと前に解決されるべき基本的な Web アプリの問題のようです。または、私は本当に間違ったことをしているかもしれません。
Seam 変換を試みましたが、助けはありません。JSF2.0 にはビュー スコープ、CDO があります。それは助けることができます線量?諸事情によりまだJSF2.0に移行できません。JAVA6、Tomcat6.20、Icefaces を使用しています。任意のヘルプが割り当てられます。
jsf - @ViewScoped は、すべてのポストバック要求で @PostConstruct を呼び出します
これは正しくないようです。コードのクリーンアップを行っていたところ、これに気づきました。すべての ajax リクエストは、コンストラクターと@PostConstruct
私の@ViewScoped
Bean を起動しています。単純なデータベースのページネーションでさえ、それを引き起こしています。
それはより長く、リクエストごとに再構築すべきではないことを理解しました。GET による完全なページのリロード後のみ。@ViewScoped
@RequestScoped
jsf - #{param} の @ManagedProperty は @ViewScoped では機能しません
私の豆にはこれがあります:
宛先の Facelet には次のものがあります。
テストを通じて、私はそれに気づき、Bean@ManagedProperty
で@PostConstruct
のみ動作することに気付きました。@RequestScoped
Bean の場合、パラメーターの値を取得する@ViewScoped
にはこれを行う必要があることがわかりました。FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")
id
これは、リクエスト パラメータの値を取得する唯一の方法@ViewScoped
ですか?
何かご意見は?
jsf - JSF 2.x @ViewScopedマネージドBeanはスレッドセーフですか?
この問題について数時間グーグルで検索しましたが、評価はありませんでした。
WELD ドキュメントと CDI 仕様は、提供されているスコープのスレッド セーフに関して非常に明確です。
例えば:
適用範囲 - 安全ではない
セッション スコープ - 安全ではありません
Request Scope - 安全で、常に単一のスレッドにバインドされます
会話範囲 - 安全 (WELD プロキシが複数の要求スレッドからのアクセスをシリアル化するため)
JSF 2.x で定義されたビュー スコープで何も見つかりません。
単一のビュー/ユーザーにバインドされているにもかかわらず、複数のリクエストが同時にスコープにヒットする可能性が非常に高いという点で、会話スコープとほぼ同じバケットにあります。私が知らないのは、JSF 実装が複数の要求から Bean へのアクセスをシリアライズするかどうかです。
これを解決できる仕様または Morraja/MyFaces 実装の知識を持っている人はいますか?
jsf - ViewScopedBeanはすべてのリクエストで構築されます...パート99
ARGH ...これには100の答えがあるようですが、自分に合った答えが見つからなかったので、実際にもう一度質問したいと思います。これが私のシナリオです:
私のサイトには、技術的には、移動先の複数のページではなく、コンテンツがスワップアウトされる単一のページがあります。開始点は次のチャンクです。
resourceInclude.xhtmlには、私のcssファイルが含まれています。
そしてmain.xhtmlはビューです:
3つh:panelGroup
ので構成されています。1つ目は4つの一般的なナビゲーションリンクのセットであり、各リンクviewSelector.modeName
は2番目のコンテンツを含めるために使用される値を変更しh:panelGroup
ます<ui:include src="#{viewSelector.modeName}-view.xhtml" />
。この例ではこれを取り除いたので、各ビューは基本的に次のようになります。
3つ目h:panelGroup
は、何が問題になっているのかをデバッグするためのすべてのメッセージのフッターです。
とにかく、ナビゲーションリンクの1つをクリックするたびに、viewSelectorBeanのコンストラクターが呼び出されます。これは私のviewSelectorBeanがどのように見えるかです:
私は何か間違ったやり方をしているに違いないことを知っています。さもないと、JSFがどのように機能するかについて中心的な何かが欠けています。入力はありますか?
jsf - @ViewScoped ポストバックごとに新しいインスタンスを作成する
私は以下のマネージドBeanを持っています。しかし、同じ Bean にポストバックするたびに、つまり updateFileList を呼び出しています。FileDAO の新しいインスタンスを取得します。
どうすればこれを防ぐことができますか? マネージド Bean 内に DAO を配置することは安全ですか。
ありがとう!
ajax - @PostConstruct メソッドは、ManagedBean が既にインスタンス化されている場合でも呼び出されます (たとえば、AJAX 呼び出しで)
@ViewScope ManagedBean と @PostConstruct 初期化メソッドがあります。このメソッドは、新しいインスタンスが作成されたときに呼び出されますが、すべての ajax 呼び出しでも呼び出されます。これはなぜですか?
AJAX 呼び出しでは、init-Method が呼び出されて実行されますが、変更は表示されません。たとえば、init-Method のプロパティを変更すると、これは開始時にのみ表示され、AJAX 呼び出しでは表示されません。AJAX 呼び出しの場合、値の変更は @ViewScoped Bean では永続的ではありません。
なぜそうなのか誰にもわかりますか?どうすればこれを変更できますか?
serialization - クライアント状態の保存がオンになっている場合、ViewScoped Bean はページにシリアル化されますか?
クライアント状態の保存を有効にし、ViewScoped バッキング Bean を使用します。クライアント状態の保存がオンになっており、ViewScoped Bean を使用している場合、ViewScoped Bean はページにシリアル化されているか、ページにシリアル化されたトークン/キーを使用してセッションに保存されています (ページがページがそれ自体にポストバックされた場合、セッションから Bean)
ここで懸念されるのは、シリアル化されている場合、ViewScoped Bean がページにシリアル化され、ネットワーク上を行き来するため、ViewScoped Bean に大きなインスタンス変数を保存しないことを心配する必要があることです。