1

8.5.3 でログアウトしたときにフル リフレッシュをトリガーします。データが失われたかどうかは気にしません。ユーザーがログアウトした場合やセッションがタイムアウトした場合に部分的な更新が失敗した場合は、完全な更新をトリガーしたいだけです。

2つのウィンドウを開いています。ウィンドウ 2 のログアウト ボタンを押してから、ウィンドウ 1 に戻って部分的な更新を実行しようとすると、何も返されません (そのコントロールの空白の値のみ)。では、ユーザーがログアウトしたときに完全な更新をトリガーするにはどうすればよいでしょうか?

onComplete、onStart、および onError クライアント側イベントを試しましたが、このログアウトがいつ発生したかを知る方法がわかりません。次のコードを試しました。

var strUserName = '#{javascript: @Name("[CN]", @UserName());}';
alert("Start: " + strUserName);

ユーザーがウィンドウ2でログアウトした場合でも、ウィンドウ1では匿名ではなく常にユーザー名を返します!

部分的な更新が失敗したり、空白の値を返したりすると、onError イベントは発生しません。

どんなアイデアや助けも大歓迎です。

4

2 に答える 2

1

onComplete には弱点が 1 つあります。値バインディングは、ご​​想像のとおり、部分的な更新後ではなく、ページのレンダリング時に評価されます。これは、リクエストの仕組みによるものです。リクエストが送信されると、リクエストのコールバックがバインドされます (onStart、onComplete など)。したがって、クライアント側のハンドラー コードは、更新が発生する前に利用可能である必要があります。

部分的な更新でアイテムがイベント ハンドラー (onComplete/onStart/onError) で更新されない場合、値バインディングはページの読み込み時にのみ更新されると思います。

これを解決するにはいくつかの方法があります。

(CSS によって) 非表示の xp:text/etc を部分的に更新するクライアント側関数を用意します。現在のユーザー名が表示されます。NodeReferenceVariable.innerHTML を使用してコンテンツを取得します。Anonymous が現在のユーザーの場合:

document.location.href = document.location.href

document.location.reload() を実行することもできますが、送信が再送信される可能性があります。

XPages Extension Library REST サービスを使用します。上記と同様、匿名の場合はページをリロードします。

于 2012-08-30T09:03:23.027 に答える
1

データベースをロックダウンしようとしましたか (匿名 = NoAccess)? その後、404 が返され、エラー ルーチンが起動します。

アップデート

あなたはできる:

  • セッションの有効期限が切れたときに起動するリダイレクト メタ ヘッダーをページに追加します (安価なソリューションですが、すでにほとんどの使用例をキャッチする可能性があります)。
  • データベースを引き続きロックダウンしますが、匿名に「公開ページを表示する」権利を与え、匿名が表示できるページに「公開アクセス可能」属性でマークを付けます
  • 何も返されないかどうかを部分的に更新して確認し、ページをリロードします (ビジネス ロジックを変更する必要があるため、ほとんどの場合は機能します)。コードのサンプルが必要になります。
于 2012-08-29T03:37:41.727 に答える