0

以下の画像で説明されているように、Front Controller パターンの実装である Web アプリケーションがあります。具体的には、この質問の回答で説明されているように、フロント コントローラー パターンのコード例に従いました。

デザイン パターン Web ベースのアプリケーション

フロントコントローラー

.jsp ページの 1 つで更新の問題が発生しています。特に、このページにはポップアップ エディターがあり、ユーザーは外部データベースのデータ セットへのリンクを追加または削除できます。ユーザーが保存ボタンを押すと、リクエストが送信され、フロント コントローラーによってインターセプトされます。次に、参照リンク (多対多の ID 番号) を保存または削除するための正しいアクションが、システム独自のデータベースで実行されます。その後、ページをリロードする必要があります。これにより、ポップアップなしで本質的に同じページにリダイレクトする前に、両方のデータベースからデータをロードする連鎖コマンドがトリガーされます。

ただし、理解できない何らかの形式のキャッシュが原因で、ページはリロードされません。キャッシュされたデータのロードを防ぐために、URLに一意の値を追加することから、jspページにメタタグを追加することまで、見つけられるすべてのソリューションを試しました。サーバー側でデータが読み込まれていることを確認しました。F5 を 1 回クリックするだけで、ページが自動的に更新されるように更新されます。

また、window.location.reload() を呼び出す onClose 関数をポップアップに実装しました。ただし、この呼び出しはフロント コントローラーに割り込み、最新の要求を処理するために現在実行中のすべてを停止します。これにより競合状態が発生し、フロント コントローラーがページのリロードを開始する前に、データを挿入/削除できる場合とできない場合があります。

列を作るべきですか?このようにしない正当な理由はありますか?フロントコントローラーの実行メソッド、またはクラス自体が何らかの同期を実装する必要がありますか?

4

1 に答える 1

0

popup-editor は iframe 内に配置して、送信時にウィンドウをリロードしないようにする必要があります。iframe によって送信されたリクエストから返されるレスポンスは、window.location.reload() をトリガーする必要があります。例えば:

<html>
  <script type='text/javascript'>
    window.onload = function() {
      window.location.reload();
    };
  </script>
</html>

もう 1 つのオプションは、Ajax 呼び出しで更新を送信し、Ajax 呼び出しが返されたときにページをリロードすることです。または、リロードせずにページを動的に更新しますが、Ajax 呼び出しによって返される JSON データを使用します。

于 2014-07-10T10:12:21.687 に答える