2011-06-29 7 views
1

私には以下の問題があります。これは、ユーザーがアプリケーションにログインして履歴を登録したときの状況です。 ワークフロー: 1.ユーザーがすでにログインしているかどうかを確認しています。つまり、ユーザーオブジェクトがセッション内にある場合は、 ログインフォームがロードされ、新しいトークンが追加されていない場合です(History.newItem( "login")) yesの場合、ユーザーはアプリケーションにメインフォームを自由に入力し、トークンを追加します(History.newItem( "main"))。 ユーザーがpassとuserを正常に入力すると、新しいトークン(History.newItem(main))が追加され、アプリケーションメインフォームが入力されます。GWT履歴のログインに関する問題

メインフォームが表示され、ブラウザで「戻る」をクリックすると、スタックから「ログイン」トークンが取得され、ログインフォームが読み込まれた後、問題が発生します。しかし、ユーザーが "進む"ブラウザボタンをクリックすると、 "メイン"トークンが取られ、メインフォームが表示されると仮定します。私はこのシナリオが好きではありません: "戻る"ボタンを押してダイアログボックスを表示し、 "アプリケーションを残してください?" 「はい」と「いいえ」ボタンが付いていますが、何らかのアクションを実行するために定期的なログインや「バック/フォワード」ログインがいつ行われたかはわかりません。

何かアドバイスや近づき...おそらく私の設計が間違って..です

背中やforwardアクションを区別するための任意の方法は?

答えて

4

このすべてを避けたい場合は、履歴に「ログイン」を入れないでください。

この場合、モーダルダイアログとしてログインパネルを実装することができます。したがって、ユーザー(またはアプリケーション)がログインを要求すると、ログイン入力フィールドとともにモーダルダイアログが表示されます。ログインを完了したら、ダイアログを閉じて現在のページをリロードするだけです(ログインの影響を受けた変更を反映するため)。

'History.fireCurrentHistoryState()'を使用すると、強制的に現在のページを再読み込みできます。これは履歴ハンドラを呼び出しますが、履歴には影響しません(履歴スタックにトークンは追加されません)。

+0

ありがとうございましたピーターはいつもあなたからの良い解決策です。 :) – adgfs

+0

ピーター、私はもう一つ質問があります。ユーザが「ログアウト」をクリックした後の動作は、ユーザがメインフォームにあり、「ログアウト」をクリックしてセッションからユーザオブジェクトを削除し、ブラウザで「戻る」をクリックしてログインフォームをロードするように、 「メイン」トークンを保持しています...どうすればこのような状況に対処できますか?履歴は、ログインに成功した後にロードされるメインフォームから開始します。 – adgfs

+0

ユーザーを認証する必要があるすべてのページ(トークン)について、ダイアログを表示し、完了するとページに進みます。このため、デシジョンツリーを通過した後、ページの内容を表示する前に、ヒストリハンドラに認証チェックを入れるとよいでしょう。 –

関連する問題