2013-01-17 45 views
0

我一直在瀏覽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> 
+0

您需要提供有關如何將這些腳本寫入頁面的更多詳細信息。 – McDowell

+0

我之前和之後添加了一個示例... – Silkster

回答

0

Javascript在客戶端加載並運行,因此這與Java或JSP無關,並且對於任何其他Web技術(包括靜態HTML)同樣有效。 我會建議在頁面結束加載.js文件:

... 
    <script type="text/javascript" src="myscript.js"></script> 
</body> 
</html> 

,並做相應處理即可在該腳本。它通常會在窗口上放置一個onload處理程序來進行一些初始化。 如果需要,該腳本還可以動態加載更多腳本。

+0

請參閱我的更新 – Silkster

+0

中的示例,外部腳本也會涉及,但有時需要添加各種javascript塊才能在頁面加載時執行某些任務 – Silkster