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

Spring MVC+Thymeleaf集成Java EE8时模型数据显示为null求助

问题解决指南:Spring MVC + Thymeleaf(非Spring Boot)集成问题

一、Model数据在Thymeleaf模板显示为null的解决步骤

1. 验证Spring MVC配置类的正确性

确保配置类启用Spring MVC注解驱动,并正确配置Thymeleaf视图解析器:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.yourpackage.controller") // 替换为你的Controller所在包
public class SpringMvcConfig implements WebMvcConfigurer {

    @Bean
    public TemplateResolver templateResolver() {
        ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
        resolver.setPrefix("/WEB-INF/templates/"); // 模板文件存放路径
        resolver.setSuffix(".html");
        resolver.setTemplateMode(TemplateMode.HTML);
        resolver.setCharacterEncoding("UTF-8");
        return resolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(templateResolver());
        return engine;
    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        resolver.setCharacterEncoding("UTF-8");
        registry.viewResolver(resolver);
    }
}
  • 重点:必须添加@EnableWebMvc注解,否则Spring MVC的@Controller等注解不会生效。
  • 确认@ComponentScan的包路径包含你的Controller类。

2. 检查Controller的注解与代码

  • 必须使用@Controller而非@RestController(@RestController会直接返回JSON/文本,不走视图解析流程):
@Controller
public class HomeController {

    @RequestMapping("/")
    public String index(Model model) {
        model.addAttribute("currentDate", new Date());
        model.addAttribute("message", "Hello Thymeleaf");
        model.addAttribute("count", 100);
        return "index"; // 返回视图名称,对应templates下的index.html
    }
}
  • 确认Model中添加的变量名与模板中的表达式完全一致(大小写敏感),比如模板用${currentDate},Controller里不能写成currentdate。

3. 验证Thymeleaf模板的语法与位置

  • 模板文件必须放在配置类中templateResolver.setPrefix()指定的路径下(如/WEB-INF/templates/index.html)。
  • 模板中正确使用变量表达式,且必须添加Thymeleaf命名空间:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
</head>
<body>
    <p>当前日期:<span th:text="${currentDate}"></span></p>
    <p>消息:<span th:text="${message}"></span></p>
    <p>计数:<span th:text="${count}"></span></p>
</body>
</html>

4. 检查web.xml中的DispatcherServlet配置

确保DispatcherServlet加载正确的Spring配置类,且拦截路径设置为/:

<servlet>
    <servlet-name>springDispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextClass</param-name>
        <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    </init-param>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>com.yourpackage.config.SpringMvcConfig</param-value> <!-- 替换为你的配置类全类名 -->
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>springDispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

二、去掉war包名,直接用localhost:8080访问index页面

1. 修改Maven打包配置(生成ROOT.war)

在pom.xml的<build>节点下添加maven-war-plugin配置,将war包名称改为ROOT:

<build>
    <finalName>ROOT</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version>
            <configuration>
                <warName>ROOT</warName>
            </configuration>
        </plugin>
    </plugins>
</build>

Tomcat默认会将ROOT.war部署为根上下文(即localhost:8080/)。

2. 配置默认访问页面

两种方式任选其一:

  • 方法一:web.xml配置欢迎页
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>
  • 方法二:通过Controller映射根路径(如上面HomeController中的@RequestMapping("/")方法)

3. IDE部署配置(可选)

如果在IDE中直接部署,需将项目的Context Root设置为/:

  • IDEA:Run/Debug Configurations → Tomcat → Deployment → 修改Application context为/
  • Eclipse:Servers视图 → 右键Tomcat → Add and Remove → 选择项目 → Edit → 修改Context root为/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:55:19