問題タブ [immediate-attribute]

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.

0 投票する
4 に答える
4647 参照

jsf - セッションBeanへのバインディングに関してjsf immediate="true"

追加ページに移動するリスティング ページがあります。追加ページには名前のテキストボックスがあり、その値はセッションスコープの Beanにバインドされています。

一覧ページには、アクション メソッドを介して追加ページに移動する追加ボタンがあります。このアクション メソッドは、名前のテキスト ボックスがバインドされているオブジェクトをクリアします。

また、追加ページにキャンセル ボタンがあります。これは、名前のテキスト ボックスがバインドされている値を再度クリアするアクション メソッドにバインドされています。

何も即時に設定されていない場合、これはすべて正常に機能します。

ただし、キャンセル ボタンを即時に設定し、名前フィールドに値を入力してからキャンセルをクリックすると、アクション メソッドが起動され、バッキング Bean のオブジェクトがクリアされ、リスト ページに移動します。次に追加をクリックすると、アクション メソッドはオブジェクトを再度クリアし (最適な方法であるかどうかは無視してください)、追加ページに移動します。追加ページの名前のテキスト ボックスが空であることが期待されますが、そうではありませんか?! 確かに、追加ボタンはすぐに表示されないため、値は再バインドされて空になるはずですか?

以下は、リスト ページの追加ボタンに関連する XHTML です。

以下は、追加ページ (myBean はセッション スコープ) の入力ボックスに関連する XHTML であり、その後に追加ページのキャンセル ボタンの XHTML が続きます。

0 投票する
3 に答える
2048 参照

ajax - JSF 2.0:CookieはAJAX呼び出しの直後に保持されません、HTTPリクエストが必要です

ショッピングカートからアイテムを削除するために実行されるAjax呼び出し-removeOrder()メソッドが呼び出されます

UIremoveOrder()呼び出し(JSF&Primefaces):

バックエンドremoveOrder()呼び出し(マネージドBean)

ここでCookieは永続化され、期待どおりにこのメソッドが出力されます。Cookie配列には、値が空のCookieが含まれています。これで問題ありません。

ここで問題が発生しました。メソッドemptyCartNotifier()は、空でない「前の」Cookie配列を参照します。

HTTPリクエストが実行された後、そのCookie配列は実際にクリーンアップされます。

私が見るように、衝突は次のとおりです
。AJAX呼び出しがCookieをクリーンアップした後、HttpServletRequest新しいHTTPリクエストが実行されるまで(ユーザーの送信ボタンまたはリンクで移動)、空でないCookieが含まれます。

WebアプリがAJAX呼び出しと非AJAX呼び出しを組み合わせた場合、即時のCookie管理のための解決策またはグッドプラクティスはありますか?

ありがとうございました。

0 投票する
3 に答える
7316 参照

jsf - ADFfacesは、必要な入力にサブミット・コンポーネントのpartialTriggerがある場合、Immediateを無視します

がある値に設定されている場合、必要な属性selectOneChoiceinputText から削除したいので、はの id を持ちますが、値を から変更すると (そして変更が送信されます) ) 必要な検証は、更新が必要なコンポーネントに対してのみトリガーされます (partialTriggers が存在するため) 他の必要なコンポーネントはその検証をトリガーしません。回避策はありますか?autoSubmit=trueimmediate=trueselectOneChoiceinputTextpartialTriggerselectOneChoiceselectOneChoice

0 投票する
1 に答える
1689 参照

validation - JSF 2.0 値が送信されない

Bean を新しいページの値で更新するのに苦労しています。ページに 2 つの送信ボタンがあり、ページのモードのブール値に基づいて表示するボタンを切り替えます。ページが更新のみの場合 (検証なし)、immediate="true" を持つ送信ボタンを表示します。 . ページが処理モード (検証) の場合、immediate="true" を持たない送信ボタンを表示します。私が直面している問題は、更新モード (検証なし) のときに、入力フィールドの値が Bean に設定されていないことです。このモードでやりたいことは、ページをそのまま保存して終了することだけです。そのページの情報は処理する準備ができていないか、必要に応じて「実際に使用する」ことができないため、検証は必要ありません。つまり、ページがプロセス モード (検証) の場合、すべてが意図したとおりに機能します。値が送信され、保存されます。

私がやろうとしていることについて特別なことは何もないので、まだコードを投稿していません。単純なゲッター/セッターを指す値バインディングがあります。私の Bean は @ViewScope にあります。

BalusC の優れたブログスポット投稿debug-jsf-lifecycleの例を使用してみました。入力フィールドに immediate="true" を設定しても、immediate="true" で送信ボタンをクリックしても影響はありません。とにかく、私が理解している方法は、 UICommand の immediate="true" であり、検証をスキップするかどうかをアプリケーションに指示するものです。入力フィールドに配置すると、検証がより早く行われます。何か不足していますか?

何か案は?これに関するすべての助けをいただければ幸いです。

アプリの仕様:
JSF 2.0.3
Tomcat 6.0.14

0 投票する
0 に答える
1136 参照

jsf - autoSubmit="true" immediate="true" の場合の valueChangeListener の動作

トリニダードを使用しています。ラジオボタンとドロップダウンについては、ページの一部を更新するために使用valueChangeListenerしています。autoSubmit="true"ただし、検証があれば表示されるため、以前immediate="true"は検証をバイパスしていました。valueChangeListenerイテレータを使用したときにループ内にドロップダウンがあると機能しましたが、機能しません。

valueChangeListenerwithautoSubmitとの動作を説明できる人はいimmediateますか?

0 投票する
3 に答える
457 参照

jsf - Jsfは常にArrayListから最後の要素を削除します

バッキング Beanに がArrayListあり、JSF ページでのレンダリングがc:forEach. 要素をインデックスで削除するArrayListと、インデックスが何であれ、jsf は常に最後の要素を削除します。なぜこれが起こるのですか?

JSFの削除ボタンは次のとおりです。

だから私は即時属性を使用します。問題は、JSF ライフ サイクルの Apply リクエスト フェーズをすぐにスキップするためだと思います。可能です?

はいの場合、この場合、リクエストの適用フェーズをどのように実行しますか?

0 投票する
1 に答える
6010 参照

ajax - AJAX 化された JSF 2.0 コンポーネントを扱うときは、immediate="true" を使用しないでください。

immediate="true"AJAX化されたJSF 2.0コンポーネントを扱うときは絶対に使用しないでください?

例は次のとおりです。

JSF 2.0ページに「キャンセル」ボタンを実装したい場合、ユーザーが「キャンセル」を押した場合、検証は実行さimmediate="true"れません。コンポーネントがajax化されたコンポーネントである場合はコンポーネントに設定するか、フォーム上のコンポーネントがないように指定する必要があります。処理されますか?もしそうなら、「古い方法」ではなく、コンポーネントのAJAX化された機能を使用してこの機能を実装する方法は何immediate="true"ですか?

0 投票する
2 に答える
7066 参照

jsf - JSF データテーブル: 行の追加と削除 行の値をクリアする

行のリストを表示する ah:datatable があり、各行のフィールドは入力フィールドです。

テーブルの前に「行を追加」ボタンを表示し、テーブルの各行に「行を削除」ボタンを表示します。

ベーキング Bean は viewScope であり、ボタンはバッキング Bean の Java リストに要素を追加/削除してから、同じビューに戻ります。

行を追加または削除するときに入力フィールドを検証しないように、ボタンの immediate 属性を「true」に設定しました。

すべて正常に動作しますが、入力フィールドの値がクリアされます。BeanがviewScopedであるため、ビューは値を保持していると思いました。

検証をトリガーせずに行を追加/削除し、ユーザーがフォームに既に入力した値を保持するにはどうすればよいですか?

私の見解:

私のバッキングビーン:

更新 --> 私の解決策:

誰かが興味を持っている場合は、ここに私の解決策を書きます。

問題は、immediate="true" を使用して検証をスキップすることですが、これにより update_model_values もスキップされるため、ユーザーがフォームに入力した値は、追加/削除ボタンをクリックしてページを再再定義した後に失われます。 .

「JSR-303 Bean 検証」を使用しているため、私の解決策は、f:validateBean を使用して検証をスキップし、それらを有効/無効にすることでした。クリックするボタンに応じて、検証を実行する場合は、Bean 検証を有効にし (たとえば、「送信」ボタンで)、それらをスキップする場合は、Bean 検証を無効にします (追加/削除のように)行ボタン)。しかし、とにかく update_model_values は常に実行されるため、値が失われることはありません。

ビューは次のとおりです。

バッキング Bean:

0 投票する
1 に答える
51900 参照

jsf - すべきでないときに入力をスキップする immediate="true" を理解しようとする

すぐにわかったと思ったら…(はぁ)

次の JSF ページを検討してください。

そして、このバッキング Bean:

即時について読んだすべてから、次のことが期待されます。

  • 入力フィールドに値を指定せずに foo を実行しようとするとprocessValidationsPhase、エラーが発生したときにアクションが実行されず、このフェーズの直後にページが再レンダリングされ、エラー メッセージが表示されます。の値はdidSomething変更されません。(これは期待どおりに動作します)

  • 入力フィールドに値を指定せずに bar を実行しようとするとapplyRequestValuesPhase、immediate 属性のためにアクションが実行されます。変数didSomethingが変更されます。(これは期待どおりに動作します)

次に何が起こるかについて、この説明は次のように述べています。

"null の戻り値 (アクション メソッドの結果として) により、処理は通常どおり続行されます。つまり、非即時コンポーネントが検証され、その後 update-model が実行されます (検証エラーが発生しなかった場合)。void を返すアクション リスナー メソッドの場合、通常のフローが望ましくない場合は、facesContext.renderResponse(); を呼び出す必要があります。"

このことから、処理は通常どおり続行され (アクション メソッドは結果も強制も返さないためrenderResponse())、同じ検証エラーが発生するという考えがありました。唯一の違いは、設定didSomethingに発生することです。ただし、これは起こりません。代わりに、入力フィールドに触れずに、サイトがまだ残りのすべてのフェーズをスキップしているように感じます. エラーメッセージなしで再レンダリングされます。

これがどのように機能するかについての私の理解が間違っている場所を誰かが説明してもらえますか?

0 投票する
1 に答える
2239 参照

jsf - ラジオボタンは即時アクション後にリセットされます (converter と ui:repeat が不可解に関与)

実際の値は正しく処理されますが、ビューが即時アクションから戻るたびに、一連のラジオ ボタンが選択されていない状態にリセットされるというシナリオに遭遇しました。ビューを更新しても、正しい値が表示されます。奇妙なことに、この動作は、コンポーネントがコンバーター使用し、コンポーネント内にない場合にのみ発生ui:repeatします。次の例に絞り込みました。

JSFページ

バッキングビーン

コンバータ

したがって、次のようになります。

  • のバッキング Bean リストから作成さSelectItem(String, String)れ、String に保存されたラジオ ボタンのグループ。コンバーターは必要ありません。
  • のバッキング Bean リストから構築されSelectItem(boolean, String)、ブール値に保存されたラジオ ボタンのグループ。ブール値をいくつかの単語 ("real"/"unreal") にマップするためのコンバーターが提供されています - 標準のコンバーター ("true"/"false") を置き換えるだけです。
  • 送信ボタン + 値が正しく設定されているかどうかをテストするための出力。
  • JSF ライフサイクルを変更する以外に何もしない、いくつかの即時アクションを持つボタン。

これにより、遊んで次のことを観察できます。

  • ページが即時アクションから戻るたびに、コンバータが外部 ui:repeatにある無線には値が表示されません。つまり、無線が選択されていません。
  • ただし、値は実際には送信時に正しく設定されます。ページを更新すると、ラジオが正しく設定されます。
  • 内部同じ無線グループは問題なく動作し、コンバーターのないものも同様です ui:repeat

より良い知識に照らしてテストしたところ、コンバータラジオが同じエラー<c:foreach>を表示するのではなく、内部に配置されていることを確認しましたui:repeat(これは、ツリーを構築してから消えるだけなので、予想どおりです)。ラジオはそれらを壊しません。BalusC のコメントに関しては、Bean を ViewScoped に変更しても問題には影響しません。その場合のみ、リフレッシュするとデフォルトで初期化された空白のページが表示されます。

ここで私は私の知識の終わりにいます。これをさらに減らす方法や、なぜこのように動作するのか、私にはよくわかりません。それで...ええと...誰かアイデアはありますか?

サーバー担当者から入手した仕様: Mojarra JSF API 実装 2.0.5-FCS、JSF 2.0、および Facelets、サーバーは Weblogic 11g 10.3