在特定场景中将值从 JSP 传递到 javascript 的好方法是什么"non-hacky"



所以,伙计们,我的团队正在开发一个大型的Java Web应用程序,它有很多遗留代码。以前处理应用程序的团队过去将变量从JSP传递到javascript的方式是将所有.js文件编译为.jsp

在 javascript 文件的开头,它将包括一个打开 <script> 标记并执行一些导入的文件(将呈现为 java 代码的注释 javascript 代码),在文件的末尾,它将包含一个关闭标记的 jsp 文件。

在javascript文件中像这样的东西:

/* <%@ include file="init.jsp" %> */
real javascript code here
/* <%@ include file="end.jsp" %> */

因此,我们可以在某个随机的jsp中像这样调用脚本文件:

<script src='whatever.js?param=<%=parameter%>'></script>

因此,我们可以从url中获取一个参数,因为实际上它是一个jsp

var x = "<%=UtilitiesWeb.getParameterFromUrl('param')%>"

每个人都同意这是一种非常糟糕的做法。

所以,我想要一个更好的方法,但我也有一些限制。请看以下场景。

我有这个jsp:

<%
final String id = (String) request.getAttribute("id");
%>
<div id="<%=id>">
<script src="whatever.js"></script>

基本上,我需要任何.js来获取java变量id,以便我可以在div中进行一些修改(在我的情况下,div将是一个网格,其中包含由avascript填充的一些数据)。但是,我不能做这样的事情:

<script src="whatever.js" data-customattribute="<%=id>"></script>
// Inside the javascript file
var id = $("script[data-customattribute]").attr("data-customattribute")
我不能

这样做的原因是因为我的 jsp 在很多地方都是异步调用的,所以我不能保证我得到了与 js 文件相关的 ID。我不认为获取带有该属性的 .last() 脚本是可靠的,因为该应用程序有许多异步调用的 javascript 文件(但它可能是,所以如果有人对此有更多了解,请说出来)。

我也尝试使用document.currentScript,但它返回null,不知道为什么?

我正在考虑使用一个<object>块来调用带有javascript的jsp文件(或者可能是唯一的javascript,不确定这是否有效),所以javascript只会对对象内部的div有访问,并且不会与文档内的任何其他div混淆,但我听说使用<object><iframe>之类的东西有一些缺点。

所以。。。有什么想法/提示/建议吗?任何意见都值得赞赏。

我们一直这样做的方法是让脚本简单地定义函数,然后你可以像这样直接在 JSP 中嵌入函数调用:

<% final String id = (String) request.getAttribute("id"); %>
<script src="whatever.js"></script>
<div id="<%=id>"></div>
<script>whatever("<%=id>")</script>

这样调试似乎更容易,您可以静态提供脚本文件。

顺便说一句,如果可以的话,我建议你看看Apache Velocity来替换JSP层。它让生活更美好:)

最新更新