首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Thymeleaf + Spring : webcontext对象“会话”不能正常工作

Thymeleaf + Spring : webcontext对象“会话”不能正常工作
EN

Stack Overflow用户
提问于 2016-10-27 02:51:28
回答 1查看 983关注 0票数 0

这是我的控制器

代码语言:javascript
复制
@Controller
public class CategoryController {
    @GetMapping(value="/categories")
    public String searchCategory(Map<String, Object> model, HttpSession session) {
        Category filter = (Category) session.getAttribute("filter");
        if(filter == null) {
            filter = new Category();
            session.setAttribute("filter", filter);
        }

        ...

        return "category-list";
    }   
}

我将一个对象存储到会话中,然后用下面的代码在UI上显示它,

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<body>
            ...
            <input type="text" class="form-control" id="name" th:field="${session.filter.name}" placeholder="name"/>
            ...
</body>

但是我最后收到了下面的错误消息,在我看来,Thymeleaf在请求中将'session‘作为一个普通对象来处理,它是预定义的Webcontext对象的整数。

代码语言:javascript
复制
2016-10-27 10:34:53.655 ERROR 5844 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[.[dispatcherServlet]      : Servlet.service() fo
r servlet [dispatcherServlet] in context with path [/smartact] threw exception [Request processing failed; nested except
ion is org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path
 resource [templates/datamaster/category-list.html]")] with root cause

java.lang.IllegalStateException: **Neither BindingResult nor plain target object for bean name 'session' available as requ
est attribute**
        at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144) ~[spring-webmvc-5.0.0.BUILD-SN
APSHOT.jar:5.0.0.BUILD-SNAPSHOT]
        at org.thymeleaf.spring4.util.FieldUtils.getBindStatusFromParsedExpression(FieldUtils.java:307) ~[thymeleaf-spri
ng4-3.0.0.RELEASE.jar:3.0.0.RELEASE]
        at org.thymeleaf.spring4.util.FieldUtils.getBindStatus(FieldUtils.java:258) ~[thymeleaf-spring4-3.0.0.RELEASE.ja
r:3.0.0.RELEASE]
        at org.thymeleaf.spring4.util.FieldUtils.getBindStatus(FieldUtils.java:227) ~[thymeleaf-spring4-3.0.0.RELEASE.ja
r:3.0.0.RELEASE]
        at org.thymeleaf.spring4.processor.AbstractSpringFieldTagProcessor.doProcess(AbstractSpringFieldTagProcessor.jav
a:173) ~[thymeleaf-spring4-3.0.0.RELEASE.jar:3.0.0.RELEASE]
        at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74
) ~[thymeleaf-3.0.0.RELEASE.jar:3.0.0.RELEASE]

如有任何意见,敬请见谅,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-10-27 18:40:21

正如Prasanna已经说过的,使用th:text="${filter.name}" (注意,filter是属性的名称)。然而,还有一件更重要的事情:不要不必要地填满你的会话!在最坏的情况下,将其设置为Spring的会话属性。通常,您将使用请求属性:

代码语言:javascript
复制
@Controller
public class CategoryController {
    @GetMapping(value="/categories")
    public String searchCategory(@ModelAttribute("filter") Category filter, Model model) {
        filter = new Category();
        model.addAttribute("filter", filter);

        ...

        return "category-list";
    }   
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40275318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档