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語言。