@SessionAttributes
@SessionAttributes
用于在请求之间将模型属性存储在 WebSession
中。它是一个类型级别的注解,声明了特定控制器使用的会话属性。这通常列出了模型属性的名称或模型属性的类型,这些属性应该透明地存储在会话中,以便后续请求访问。
请看以下示例:
- Java
-
@Controller @SessionAttributes("pet") [id="CO1-1"]1 public class EditPetForm { // ... }
<1> 使用 `@SessionAttributes` 注解。
- Kotlin
-
@Controller @SessionAttributes("pet") [id="CO2-1"][id="CO1-1"][id="CO2-1"](1) class EditPetForm { // ... }
<1> 使用 `@SessionAttributes` 注解。
在第一个请求中,当名为 pet
的模型属性被添加到模型中时,它会自动提升并保存到 WebSession
中。它会一直保留在那里,直到另一个控制器方法使用 SessionStatus
方法参数清除存储,如下例所示:
- Java
-
@Controller @SessionAttributes("pet") [id="CO3-1"][id="CO1-2"][id="CO3-1"](1) public class EditPetForm { // ... @PostMapping("/pets/{id}") public String handle(Pet pet, BindingResult errors, SessionStatus status) { [id="CO3-2"][id="CO1-3"][id="CO3-2"](2) if (errors.hasErrors()) { // ... } status.setComplete(); // ... } } }
<1> 使用 `@SessionAttributes` 注解。 <1> 使用 `SessionStatus` 变量。
- Kotlin
-
@Controller @SessionAttributes("pet") [id="CO4-1"][id="CO1-4"][id="CO4-1"](1) class EditPetForm { // ... @PostMapping("/pets/{id}") fun handle(pet: Pet, errors: BindingResult, status: SessionStatus): String { [id="CO4-2"][id="CO1-5"][id="CO4-2"](2) if (errors.hasErrors()) { // ... } status.setComplete() // ... } }
<1> 使用 `@SessionAttributes` 注解。 <1> 使用 `SessionStatus` 变量。