@SessionAttributes 清除Session

spring提供注解@SessionAttributes将Model中的数据同步到HttpSession中。在清除Session中的数据时不能调用HttpSession中的removeAttribute("attributeName")方法,需要调用接口SessionStatus中的setComplete方法。接口SessionStatus的唯一实现是类SimpleSessionStatus,调用setComplete方法将boolean类型的属性complete设置为true。
public class SimpleSessionStatus implements SessionStatus {

	private boolean complete = false;


	@Override
	public void setComplete() {
		this.complete = true;
	}

	@Override
	public boolean isComplete() {
		return this.complete;
	}

}

该类还有一个方法是isComplete将会在ModelFactory中的updateModel方法中调用,updateModel方法用于将@SessionAttributes中列出的model attributes推广到session中。

public void updateModel(NativeWebRequest request, ModelAndViewContainer container) throws Exception {
		ModelMap defaultModel = container.getDefaultModel();
		if (container.getSessionStatus().isComplete()){
			this.sessionAttributesHandler.cleanupAttributes(request);
		}
		else {
			this.sessionAttributesHandler.storeAttributes(request, defaultModel);
		}
		if (!container.isRequestHandled() && container.getModel() == defaultModel) {
			updateBindingResult(request, defaultModel);
		}
	}
由于之前我们调用了setComplete方法,所以方法会进入if分支调用SessionAttributesHandler的cleanupAttributes方法。该方法用于将从session中移除已知的属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值