【发布时间】:2014-12-01 12:41:09
【问题描述】:
在 Spring Web 应用程序中,我正在尝试创建一个虚拟 JSP 页面来构建:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<html lang="en">
<head xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:spring="http://www.springframework.org/tags">
<meta charset="utf-8" />
<spring:url value="/resources/scripts/d3.js" var="d3_url" />
<script type="text/javascript" src="${d3_url}">
<jsp:text />
</script>
<title>A Pagey Page</title>
</head>
<body>
<h1>Hello world!</h1>
<P>What up?</P>
<script type="text/javascript">
d3.select("body").append("p").text("D3 works!");
</script>
</body>
</html>
我在页面的标题中加载了 d3.js,没有任何抱怨,所以我假设找到了资源。但是,当我在页面正文中使用 D3 脚本时,我得到“Uncaught ReferenceError: d3 is not defined”。我对调用的语法持肯定态度,因为我已经在一个简单的 HTML 页面中测试了相同的东西并且它有效。
所以,要么这不是在 JSP 页面中使用 D3 的方式,要么不知何故根本没有加载资源。我的资源文件夹在配置文件中声明:
<resources mapping="/resources/**" location="/resources/" /> 和我三重检查了 d3.js 确实在 /resources/scripts 文件夹中。
在JSP中使用d3.js的正确方法是什么?
更新:在 Google Chrome 开发工具中,控制台 d3 无法识别。这导致得出的结论是,尽管没有关于在标题中加载 d3 的警告,但它没有被正确加载。但为什么呢?
更新 2:当我替换时
<spring:url value="/resources/scripts/d3.js" var="d3_url" />
<script type="text/javascript" src="${d3_url}">
与
<script type="text/javascript" src="/resources/scripts/d3.js">
我在该行的 Chrome 控制台中收到 Failed to load resource: the server responded with a status of 404 (Not Found)。
已解决:我的错。从资源位置删除前导斜杠后,它起作用了! value="resources/scripts/d3.js"。考虑到明确指出了资源根,我仍然不明白为什么这会影响结果。
【问题讨论】:
-
浏览器的网络流量选项卡是验证脚本是否正确加载的最佳方式。您还可以查看页面的源代码,了解 JSTL 标记注入的实际 URL。
-
Chrome 的网络选项卡是空的,但是当我加载 d3 正常工作的简单 HTML 时,它也是空的。页面来源显示
<spring:url value="/resources/scripts/d3.js" var="d3_url" /> <script type="text/javascript" src=""></script> -
@LimboExile,第一次打开它是空的。打开“网络”,刷新页面。
-
我用解决方案更新了问题。实际上,解决方案并不能清除所有内容。我不知道我应该如何根据 SE 规则处理这个问题。
标签: java javascript spring jsp d3.js