OK みんな、奇妙なシナリオに行きましょう !
JSF 、Spring、および Hibernate/JPA があります。
検索フォームがあり、多くの入力に基づいて検索したいとします。応答はフォームに戻り、グリッドに表示されます。
そのため、いくつかの入力をサーバーに送信し、応答がユーザーに返されるのを待ちます。
問題は次の場合です。
2 つのブラウザーを開いて同じフォームに移動し、2 つのフォームにいくつかの入力を入力すると、グリッドに間違った結果が表示されます。
誤った結果の意味:
フォーム 1 : (入力: lineId=10 、結果 (予想): lineId=10を含む行);
フォーム 2 : (入力 : lineId=20 、結果 (予想) : lineId=20を含む行);
しかし、2 つのフォームのボタンを同時にクリックしてフォーム (コントローラー) のアクションを呼び出すと、結果は次のようになります。
フォーム 1 : (入力: lineId=10 、結果: lineId=20を含む行);
フォーム 2 : (入力: lineId=20 、結果: lineId=10を含む行);
私のフォームのスコープは: request
私のサービスのスコープは: singleton
私のフォームにはボタンアクションを呼び出すメソッドがあり、このメソッドは入力をサービスに送信し、サービスからの応答を返した後、フォームに再度送信して表現します(非常に一般的な動作)。
このシナリオは同時呼び出しアクションで発生し、同期されていないボタンをクリックすると、すべて問題ありません.!!
なにが問題ですか ?何が起こっているのですか?