私はStackOverflowを調べて、JSPページでのJavaScriptコマンドの出力の管理に関する情報を見つけるために、より広範な検索を行ってきました。私はJava開発者ではないので、ここで専門家にガイダンスを求めています。
サーバー上でJavaScriptをコンパイルしようとしているのではなく、JSPページ内に出力するためのコードブロックまたは単純な1行のコマンドを格納する方法があります。主な目標は、必要なすべてのコマンドとコードブロックをページの下部にある1つのSCRIPTタグに結合することにより、ページ内での複数のインラインSCRIPTタグの使用を減らすことです。コードブロックとコマンドは通常、Webページ内のさまざまなコンポーネントを初期化するために使用され、JSONにシリアル化されてコマンドに直接渡されるサーバーからのデータや、スクリプトブロックやスクリプトブロックになるトークン化された文字列に値を設定するために使用されるデータが含まれるものもあります。コマンド。
このオブジェクトは、JSPページおよびサーバー側に含まれるモジュール/ページで使用できる必要があります。
私はこのような質問を見つけました:Javaスクリプトエンジンはどこで使用されていますか?、しかし、サーバー上でスクリプトをコンパイルしたくないので、Webページ内で使用するためにスクリプトを出力したいと思います。私は.Net開発者であり、.NetWebサイトの組み込みAJAX機能に対してこの正確なタスクを実行するために使用されるScriptManagerオブジェクトに精通しています。別のプロジェクトでは、これを行うために.NetScriptManagerを拡張しました。
考えや提案は大歓迎です。
更新:たとえば、以下の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>