2

これは、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;
}   
4

1 に答える 1

0

使用できますSessionStatus.setComplete()

于 2013-04-28T07:22:50.357 に答える