如何在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结构,导致解析失败,因此仅用于简单场景。
关键注意点
- 日期格式:FullCalendar的
start字段需要ISO标准格式(如2024-05-20),确保数据库日期字段输出为该格式,或在序列化时处理。 - 避免EL直接输出对象:JSP中
${jsonData}如果是Java集合,输出时会调用对象的toString()方法,得到[Object Object]这类无效内容,必须先转为JSON字符串。
内容的提问来源于stack exchange,提问作者bear bear
相关产品推荐
相关产品推荐

