これは、2つのSpring3コントローラー間でのセッションの共有に関する質問です。
1つのコントローラーがエンティティの表示を処理します。データベース選択結果を@SessionAttributesにキャッシュします。別のコントローラーがエンティティの追加と削除を処理します。課題は、2番目のコントローラーがエンティティを追加または削除するたびに、最初のコントローラーのセッションキャッシュを削除することです。
インデックスコントローラー
@Controller
@RequestMapping(value="/fileIndex")
@SessionAttributes(value={IndexController.INDEX_ITEM_LIST})
public class FileIndexController extends IndexController {
if(!model.containsAttribute(IndexController.INDEX_ITEM_LIST)) {
model.addAttribute(IndexController.INDEX_ITEM_LIST, getFileList(screenObject)); // sql select
}
screenObject.setPageItemList((List<?>) model.asMap().get(IndexController.INDEX_ITEM_LIST), pageNumber); // page of entities (subset of cached sql select)
アクションコントローラー-削除メソッド
@RequestMapping(method=RequestMethod.POST, params=ACTION_DELETE)
public ModelAndView delete(@ModelAttribute("screenObject") FileHeaderEditScreenObject screenObject, BindingResult bindingResult, Model model, Locale locale) {
try {
fileService.deleteFile(screenObject.getFileId());
} catch(Throwable t) {
screenObject.addError(t.getMessage());
}
ModelAndView modelAndView=new ModelAndView();
if(screenObject.getErrorCount()>0) {
initializeScreenObject(screenObject.getFileId(), screenObject, locale, false);
modelAndView.setViewName(WebView.FILE_HEADER_EDIT_PAGE.getViewName());
} else {
modelAndView.setViewName("redirect:/fileIndex");
}
model.asMap().remove(IndexController.INDEX_ITEM_LIST); // this does not work
return modelAndView;
}