0

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

私のフォームにはボタンアクションを呼び出すメソッドがあり、このメソッドは入力をサービスに送信し、サービスからの応答を返した後、フォームに再度送信して表現します(非常に一般的な動作)。

このシナリオは同時呼び出しアクションで発生し、同期されていないボタンをクリックすると、すべて問題ありません.!!

なにが問題ですか ?何が起こっているのですか?

4

1 に答える 1