2016-12-04 71 views
0

我有一個奇怪的行爲與SessionAttribute。 我已經定義了一個名爲nafSelection的SessionAttribute,用於2個控制器:NafController和StatsController。Spring MVC SessionAttribute在所有控制器中都沒有初始化(Spring Boot 1.4.2)

當我通過NafController時,SessionAttribute被創建並且StatsController可以使用它。如果首先,我使用StatsController我有一個錯誤「Missing會話屬性'nafSelection'類型NafSelection」。

共享模型屬性,我編寫了一個ControllerAdvice:

@ControllerAdvice('com.dyndata.sirene.controllers') 
class ModelAdvice { 
    @ModelAttribute("nafSelection") 
    NafSelection newSelection() { 
     new NafSelection() 
    } 
} 

我宣佈會議屬性在我的2個控制器:

@Controller 
@SessionAttributes("nafSelection") 
class NafController { 
    private static Logger logger = Logger.getLogger(NafController.class.name); 

    @RequestMapping('/naf') 
    def naf() { 
     'naf' 
    } 

    @RequestMapping(path = '/naf/{nafCode}', method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) 
    @ResponseBody 
    def affNafCode(@PathVariable String nafCode, @SessionAttribute NafSelection nafSelection) { 
     logger.info("Adds the NAF " + nafCode) 
     nafSelection.nafs << nafCode 

     return new Counter(count: 5600) 
    } 

    @RequestMapping(path = '/naf/{nafCode}', method = RequestMethod.DELETE) 
    @ResponseBody 
    def delNafCode(@PathVariable String nafCode, @SessionAttribute NafSelection nafSelection) { 
     logger.info("Deletes the NAF " + nafCode) 
     nafSelection.nafs.remove(nafCode) 

     return new Counter(count: 80000) 
    } 
} 

第二控制器:

@Controller 
@SessionAttributes("nafSelection") 
class StatsController { 
    private static Logger logger = Logger.getLogger(StatsController.class.name); 

    @RequestMapping(path = '/stats') 
    def stats(@SessionAttribute NafSelection nafSelection) { 
     'stats' 
    } 
} 

爲什麼會話屬性由NafController而不是由StatsController管理?

注意:我的代碼採用Groovy語言。

回答

0

我發現:)

我必須標記方法的參數爲的ModelAttribute而不是SessionAttribute。

相關問題