You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thymeleaf中#session.removeAttribute执行异常原因咨询

问题原因
  • Thymeleaf的SpringEL表达式在模板中默认禁止执行有副作用的方法,removeAttribute()属于修改session状态的操作,违背了模板作为视图层仅负责渲染数据、不修改后端状态的设计原则,因此触发解析异常。
  • 报错org.attoparser.ParseException是模板解析器直接拒绝了这种改变上下文状态的方法调用导致的。
解决方法
  1. 后端处理session属性移除
    在控制器的请求处理方法中完成message属性的移除,不要在模板中操作:
@GetMapping("/signup")
public String showSignupPage(HttpSession session) {
    session.removeAttribute("message");
    return "signup";
}
  1. 模板仅取值,后端自动清理
    如果需要显示message后自动移除,可以在后端读取属性后立即清理,再将值传递给模板渲染:
@GetMapping("/signup")
public String showSignupPage(HttpSession session, Model model) {
    String message = (String) session.getAttribute("message");
    if (message != null) {
        model.addAttribute("message", message);
        session.removeAttribute("message");
    }
    return "signup";
}

模板中直接取值即可:

<div th:if="${message}" th:text="${message}"></div>
  1. 使用@SessionAttributes配合清理(可选)
    通过Spring的注解标记session属性,在请求完成后自动清理:
@SessionAttributes("message")
@Controller
public class SignupController {
    @GetMapping("/signup")
    public String showSignupPage(SessionStatus sessionStatus) {
        sessionStatus.setComplete();
        return "signup";
    }
}

内容的提问来源于stack exchange,提问作者Vishal Srivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:05:40