0

5つの選択肢があるチェックボックスを使用して、かなり単純なフォームのトラブルシューティングを行っています。各選択肢は、チェックボックスがオンになっているかどうかに応じて非表示または表示されるフィールドのグループに対応しています。かなりシンプルです。

チェックボックスには、onClickイベントに、viewScope変数を設定し、すべてのフィールドグループを囲むパネルを部分的に更新するコードが含まれています。各フィールドグループは、viewScope変数がtrueの場合にレンダリングされるパネル内にあります。

ただし、3つのオプションをすばやく選択すると、最初のクリックの後のクリックが常に検出されるとは限らず、最初のパネルのみが表示されることがわかります。これは、onClickイベントが1回だけ実行され、すでに実行されている場合は再実行されないためだと思います。

誰かがこれを行うためのより応答性の高い方法を提案できますか?個々のチェックボックス?代わりにクライアント側のJS?

4

2 に答える 2

1

部分的な更新には遅延があります。遅延は約 20 秒、または最後の部分的な更新が完了するまでです。正確な遅延は、パラメーターxsp.partial.update.timeout=[seconds]を使用して xsp.properties-file で構成できます。

現在の遅延は、CSJS で XSP.submitLatency を使用して照会できますクライアントでXSP.allowSubmit()を呼び出すことにより、この遅延をリセットできます。これにより、同時に「複数の」更新が可能になります。

しかし、これらのアクロバティックなアクションを実行する前に、ユーザー インターフェースについてよく考える必要があります。ユーザーが手動でこれを実行できるように、単純な「更新」ボタンを提供してみませんか? または、ローディング オーバーレイを追加して、「何かが起こっている」ことをユーザーに通知することもできます。このオーバーレイにより、複数回のクリックが防止され、ユーザーがクリックする速度が速すぎても問題がなくなります。

于 2012-10-04T07:03:17.807 に答える
1

Svenさんに激しく同意。サーバー側の更新/部分的な更新の性質も、しばらくの間私を悩ませました。

このようにする必要がある場合、最終的に私が行ったのは、チェックボックス(実際にはラジオグループを使用していました)からcss display属性をnoneに設定したCSJSを介してオブジェクトフィールドへの更新を開始することでした. このフィールドは、viewScope 変数にバインドし直したものです。非表示のオブジェクト フィールドは onBlur CSJS イベントで更新されます。

viewScope の変数を表示用に更新するには、少なくとも部分的な更新が必要です。このために、フォームを保存すると、最新の計算された情報が読み込まれることを人々が知っているという仮定を使用します。

于 2012-10-04T12:57:06.157 に答える