我一直在查看 StackOverflow 并进行更广泛的搜索,以找到有关在 JSP 页面中管理 JavaScript 命令输出的一些信息。我不是 Java 开发人员,所以我在这里向专家寻求一些指导。
我不是想在服务器上编译 JavaScript,而是想办法存储代码块或简单的单行命令以在 JSP 页面中输出。主要目标是通过将所有必要的命令和代码块组合到页面底部的一个 SCRIPT 标记中来减少页面内多个内联 SCRIPT 标记的使用。代码块和命令通常用于初始化网页中的各种组件,其中一些将包括来自服务器的数据,这些数据被序列化为 JSON 并直接传递给命令,或用于设置标记化字符串中的值,这些字符串成为脚本块和/或命令。
该对象需要可用于任何 JSP 页面和任何服务器端包含的模块/页面。
我发现了这样一个问题:Java 脚本引擎在哪里使用?,但我不想在服务器上编译脚本,我想输出脚本以在网页中使用。我是一名 .Net 开发人员,我熟悉 ScriptManager 对象,该对象用于为 .Net 网站上的内置 AJAX 功能执行此确切任务。在另一个项目中,我扩展了 .Net ScriptManager 来执行此操作。
非常感谢您的想法或建议。
更新:以下面的 JSP 代码为例。我想在 Java 中有一个对象来将这些命令存储在标签内,以便在页面末尾输出。
这就是我现在所拥有的:
<html>
<head>
<script type="text/javascript" src="somelibrarycode.js"></script>
...
</head>
<body>
...
<%
// server-side code to set a value:
// obj is an object with method getBar that returns string
string foo = obj.getBar();
%>
<div id="someComponent"></div>
<script type="text/javascript">
// client-side code to initialize some page components:
// this would be what I consider a JavaScript command:
someLibraryCode.someComponent.init('<%=foo%>');
</script>
...
...
...
...
<%
// server-side code that to create instance of someObjectClass that has a
// toJSON serializer method;
someObjectClass myObject = new someObjectClass();
%>
<div id="anotherComponent"></div>
<script type="text/javascript">
// more client-side code that takes the result of myObject.toJSON() which is
// a JSON encoded-string value:
someLibraryCoode.anotherComponent.init(JSON.decode('<%= myObject.toJSON() %>'));
</script>
...
</body>
</html>
这就是我想要做的:
(假设 myScript.add() 接受一个字符串和数组作为参数)
<html>
<head>
<script type="text/javascript" src="somelibrarycode.js"></script>
...
</head>
<body>
...
<%
// server-side code to set a value:
// obj is an object with method getBar that returns string
string foo = obj.getBar();
ScriptManager myScript = new ScriptManager();
string commandString = "someLibraryCode.someComponent.init('{0}');";
myScript.add(commandString, [foo]);
%>
<div id="someComponent"></div>
...
...
...
...
<%
// server-side code that to create instance of someObjectClass that has a
// toJSON serializer method;
someObjectClass myObject = new someObjectClass();
string myObjectJSON = myObject.toJSON();
commandString = "someLibraryCoode.anotherComponent.init(JSON.decode('{0}'));";
myScript.add(commandString, [myObjectJSON]);
%>
<div id="anotherComponent"></div>
...
...
...
<script type="text/javascript">
// only one script tag within the body element
// writeScript() outputs all stored script blocks/commands:
myScript.writeScript();
</script>
</body>
</html>