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

Spring Web项目中JSTL核心标签库无法显示数据求助

排查Spring MVC + JSTL数据不显示的常见问题

嗨~刚接触Spring MVC和JSP的话,碰到JSTL无法展示Controller传递的数据太正常了,我帮你梳理几个最容易踩的坑,你可以逐一排查:

1. 确认JSTL依赖是否正确引入

首先得保证项目里有正确的JSTL依赖,避免因为缺失依赖导致标签失效:

  • Maven项目:在pom.xml中添加以下依赖
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>
  • Gradle项目:在build.gradle中添加
implementation 'javax.servlet.jsp.jstl:jstl:1.2'
implementation 'taglibs:standard:1.1.2'

⚠️ 注意:不要手动在WEB-INF/lib中重复放入JSTL的jar包,会引发依赖冲突。

2. 检查JSP页面是否正确引入JSTL核心标签库

在你的JSP页面最顶部必须添加标签库声明,否则JSTL标签根本不会被识别:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

这里的prefix="c"是行业约定的前缀,如果你自定义了其他前缀,遍历数据时要对应修改。

3. 确认Controller是否正确将数据存入Model

Spring MVC中,必须把数据库获取的数据存入Model或ModelAndView中,且键名要和JSP中使用的一致:
示例Controller代码:

@Controller
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/list")
    public String getUserList(Model model) {
        // 从数据库获取数据
        List<User> userList = userService.getAllUsers();
        // 将数据存入Model,键名"userList"要和JSP中取值的键一致
        model.addAttribute("userList", userList);
        // 返回视图名称(对应JSP文件名)
        return "user-list";
    }
}

⚠️ 不要用request.setAttribute()传递数据,Spring MVC推荐使用Model来统一管理视图数据。

4. 检查JSP页面的遍历逻辑是否正确

JSP中遍历数据时,要保证表达式和Controller存入的键名、Model类的属性名完全匹配:
示例JSP代码:

<table>
    <thead>
        <tr>
            <th>用户ID</th>
            <th>用户名</th>
            <th>邮箱</th>
        </tr>
    </thead>
    <tbody>
        <!-- 先判断集合是否为空,避免空指针同时提升用户体验 -->
        <c:if test="${not empty userList}">
            <c:forEach items="${userList}" var="user">
                <tr>
                    <td>${user.id}</td>
                    <td>${user.username}</td>
                    <td>${user.email}</td>
                </tr>
            </c:forEach>
        </c:if>
        <c:if test="${empty userList}">
            <tr>
                <td colspan="3">暂无用户数据</td>
            </tr>
        </c:if>
    </tbody>
</table>

⚠️ 注意:${user.id}中的id要和你的Model类(比如User)的getter方法对应——比如getId()对应id,大小写必须匹配。

5. 确认视图解析器配置正确

Spring的视图解析器必须正确配置,且要指定JstlView作为视图类,否则JSTL表达式无法被解析:
示例Java配置(WebMvcConfigurer实现类):

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/"); // JSP文件所在目录前缀
        resolver.setSuffix(".jsp"); // JSP文件后缀
        resolver.setViewClass(JstlView.class); // 必须指定JstlView
        return resolver;
    }
}

如果是XML配置:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
</bean>

6. 验证数据库查询是否真的返回了数据

最后可以在Controller中加个简单的输出,确认从数据库拿到的集合不是空的:

System.out.println("获取到的用户数量:" + userList.size());

如果输出为0,那问题出在DAO层或数据库查询语句上,和JSTL无关哦~


如果按照上述步骤排查后还是无法解决问题,欢迎把你的Model、Controller和JSP代码贴出来,我再帮你针对性分析!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:46:39