1

私たちはSpringMVCWebアプリケーションを構築しました。これは、ユーザーが特定の順序で物事を行うことに大きく依存しており、通常の場合(「現時点では想定されていない場所)、ユーザーが新しいタブまたはブラウザウィンドウでアプリケーションの別のインスタンスを開くと、いくつかの問題が発生します。

アプリケーションはドメインモデルをユーザーのセッションに保存するため、別のウィンドウでプログラムを使用するとモデルのデータが混乱する可能性があるため、プログラムを正しい順序で使用し、使用しないユーザーを検証するページIDメカニズムをすでに実装しています。ブラウザのナビゲーションですが、プログラムのリセット(これは機能であり、ユーザーをホーム画面にリダイレクトし、ドメインモデルをクリアする)が1つのウィンドウで発生し、ユーザーが依存する何かをしようとすると、まだ問題に直面しています。別のウィンドウで有効なデータで埋められるドメインモデル(NullPointerExceptionがすぐに発生します)。

4

3 に答える 3

0

一部のユーザーの詳細(ID、名前、メールなど)をセッションに保存することは問題ないかもしれませんが、ユーザーの状態(または頻繁に変更されるデータやアプリの他のものに大きな影響を与えるデータ)を保存することは良い考えとは思えません。 。

うまくいけば、次のアプローチのいずれかがあなたに合うでしょう:

  • セッションに状態を保存しないでください。必要なときはいつでも(この場合、ユーザーが順番に実行する必要のあるステップの1つにアクセスしようとするときはいつでも)データベースから状態をロードしてください。キャッシュを使用する場合、これがパフォーマンスに大きな影響を与えることはありません。
  • 状態をデータベースに保存しないでください。セッション中のみです。プロセスが完了するまでドメインオブジェクトのコミットを延期できる限られたケース(たとえば、航空券の注文)で機能します。
  • マルチステッププロセスにはAjaxを使用し、状態をまったく保存しないでください(ブラウザーで暗黙的に保存する場合を除く)。これには、すべてのステップを1つのページにまとめ、コードの一部を修正する必要があります。

とにかく、誰かがログインしてステップ3に進もうとした場合、例外がスローされることはありませんが、それは別の話です。

于 2012-05-02T18:07:43.543 に答える
0

私があなたなら、ユーザーがWebサイトの他の部分(ウィザードのプロセスに干渉しない部分)を歩き回ることができます。ただし、再起動を試みたら、セッションにPageIDがあるかどうかを確認し、開始した内容が終了していないことを通知し、キャンセル/再起動するか、終了した場所から続行するかを尋ねます。

于 2012-05-02T18:08:52.567 に答える
0

誰かがこの質問をもう一度読んだ場合:

HttpSessionがドメインモデルのコピーを1つだけ保持する代わりに、コレクションを保持し、要求/応答を介してモデルの1つへの参照を転送するため、コントローラーとビューで適切なモデルを操作できます。

于 2013-06-13T18:55:40.247 に答える