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

如何在JSP的<script>中访问<sql:query>的结果集

问题分析与解决方法

你的核心问题是:JSP中获取的Java对象集合直接在JavaScript中输出时,会被转为[Object Object]这类无效的字符串,而非可被JS识别的JSON结构。以下是具体解决思路和步骤:


方法一:用JSON序列化库转换(推荐)

直接通过Java的JSON序列化工具(如Jackson)把数据库查询结果转为标准JSON字符串,避免手动拼接的错误。

步骤1:引入Jackson依赖

如果使用Maven,在pom.xml中添加:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

步骤2:在JSP中序列化数据

<%@ page import="com.fasterxml.jackson.databind.ObjectMapper" %>
<%
    // 假设schedule是你通过<sql:query>获取的结果集List
    ObjectMapper jsonMapper = new ObjectMapper();
    String calendarJson = jsonMapper.writeValueAsString(schedule);
%>

步骤3:在JavaScript中直接使用

<script>
// 直接把序列化好的JSON字符串转为JS对象数组
var calendarEvents = <%= calendarJson %>;

// 初始化FullCalendar
document.addEventListener('DOMContentLoaded', function() {
    var calendarEl = document.getElementById('calendar');
    var calendar = new FullCalendar.Calendar(calendarEl, {
        initialView: 'dayGridMonth',
        events: calendarEvents, // 直接传入处理好的事件数组
        dateClick: function(info) {
            // 筛选点击日期的课程
            var dayCourses = calendarEvents.filter(item => item.start === info.dateStr);
            console.log('当天课程:', dayCourses);
            // 这里可以添加弹窗展示课程的逻辑
        }
    });
    calendar.render();
});
</script>

方法二:手动拼接严格格式的JSON(不推荐,易出错)

如果不想引入第三方库,需确保手动拼接的字符串是标准JSON格式:

步骤1:在JSP中拼接JSON字符串

<c:set var="jsonData" value="[" />
<c:forEach items="${schedule}" var="course" varStatus="status">
    <c:set var="jsonData" value="${jsonData}{\"title\":\"${course.courseName}\", \"start\":\"${course.courseDate}\"}" />
    <c:if test="${!status.last}">
        <c:set var="jsonData" value="${jsonData}," />
    </c:if>
</c:forEach>
<c:set var="jsonData" value="${jsonData}]" />

步骤2:在JavaScript中解析

<script>
// 注意用单引号包裹JSON字符串,再解析
var calendarEvents = JSON.parse('${jsonData}');
// 后续FullCalendar初始化逻辑同上
</script>

⚠️ 注意:这种方法如果课程名称包含引号、转义字符,会直接破坏JSON结构,导致解析失败,因此仅用于简单场景。


关键注意点

  1. 日期格式:FullCalendar的start字段需要ISO标准格式(如2024-05-20),确保数据库日期字段输出为该格式,或在序列化时处理。
  2. 避免EL直接输出对象:JSP中${jsonData}如果是Java集合,输出时会调用对象的toString()方法,得到[Object Object]这类无效内容,必须先转为JSON字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:57:23