【问题标题】:How to remove one controller's session attribute from another?如何从另一个控制器中删除一个控制器的会话属性?
【发布时间】:2012-04-26 21:05:59
【问题描述】:

这是一个关于两个 Spring 3 控制器之间共享会话的问题。

一个控制器处理实体的显示。它将数据库选择结果缓存在@SessionAttributes 中。另一个控制器处理实体的添加和删除。挑战是在第二个控制器添加或删除实体时删除第一个控制器的会话缓存。

索引控制器

@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;
}   

【问题讨论】:

    标签: spring session controller


    【解决方案1】:

    你可以使用SessionStatus.setComplete()

    【讨论】:

      猜你喜欢
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 2011-11-17
      相关资源
      最近更新 更多