我一直在瀏覽StackOverflow並進行更廣泛的搜索,以查找有關在JSP頁面中管理JavaScript命令輸出的一些信息。我不是Java開發人員,所以我要求這裏的專家提供一些指導。在Java中管理網頁的腳本塊/命令輸出
我不是想在服務器上編譯JavaScript,而是有一種方法來存儲代碼塊或簡單的單行命令以在JSP頁面內輸出。主要目標是通過將所有必需的命令和代碼塊組合到頁面底部的一個SCRIPT標籤中,減少頁面內多個內聯SCRIPT標籤的使用。代碼塊和命令通常用於初始化網頁中的各種組件,其中一些將包括來自服務器的數據,該數據被序列化爲JSON並直接傳遞給命令或用於設置標記化字符串中的值,這些值將成爲腳本塊和/或命令。
該對象需要可用於任何JSP頁面和任何包含服務器端的模塊/頁面。
我發現像這樣的問題:Where is the Java scripting engine used?,但我不想在服務器上編譯腳本,我想輸出腳本在網頁中使用。我是一名.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>
您需要提供有關如何將這些腳本寫入頁面的更多詳細信息。 – McDowell
我之前和之後添加了一個示例... – Silkster