2 つのリスト変数を持つポートレット コントローラーがあります。
private List<MyObject1DTO> list1;
private List<MyObject2DTO> list2;
私の JSP では、AJAX リクエストを使用してオブジェクトをコントローラに送り返します。コントローラは、ユーザーが送信した内容に応じてオブジェクトをいずれかのリストに追加します。ユーザー セッションがタイムアウトすると、これらのリストはどうなりますか?
ユーザーがこれらのリストにオブジェクトを追加し (大きなフォームです)、フォームの残りの部分を埋めて [送信] を押すと、それらのリストの検証が失敗することがあります (空にすることはできません)。ユーザーがフォームに入力しているときにセッションが何らかの形でタイムアウトし、それらのリストがクリアされるかどうか疑問に思っています。リストが空になる原因として、他に何が考えられるでしょうか?
私がこれを行った方法は設計上の欠陥ですか?これを行うより良い方法はありますか?
とても大きなフォームで、たくさんのフィールドがあります。これらのオブジェクトを作成し、AJAX 要求によってリストに送信するフォームには 2 つの異なる部分があります。コントローラーでajaxリクエストを処理しているとき、モデル自体にアクセスできないため、オブジェクトをモデルに追加できません。だから私はコントローラのリストでそれをしました。
編集:
@Controller("myController")
@RequestMapping("VIEW")
public class MyController {
private List<MyObject1DTO> list1;
private List<MyObject2DTO> list2;
@ModelAttribute(value = "myFormDTO")
public MyFormDTO getMyFormDTO() {
....
}
// Controller mappings etc.
}
フォームを表すモデル属性としてバインドされたオブジェクトがあります。ただし、これにはそれらのリストは含まれません。オブジェクトをリストに追加するために使用する ajax リクエストでこのモデル属性にアクセスする方法がわからない (可能だとは思わない) ためです。基本的に、ユーザーに表示されるフォームは、モデル属性にバインドされたフィールドです。次に、ユーザーが項目を追加できる 2 つの異なる「バスケット」(リスト) があります (コントローラー内のリストには、ユーザーが追加したオブジェクトが保持されます)。バスケットにアイテムを追加する方法は、ajax リクエストによるものです。