Управление блоком скрипта / выводом команды для веб-страниц в Java
Я просматривал Stackru и выполнял более широкий поиск, чтобы найти некоторую информацию об управлении выводом команд JavaScript на странице JSP. Я не Java-разработчик, поэтому я прошу совета у экспертов здесь.
Я не пытаюсь скомпилировать JavaScript на сервере, а имею способ хранить блоки кода или простые однострочные команды для вывода на странице JSP. Основная цель - уменьшить использование нескольких встроенных тегов SCRIPT на странице путем объединения всех необходимых команд и блоков кода в один тег SCRIPT внизу страницы. Блоки кода и команды обычно используются для инициализации различных компонентов на веб-странице, и некоторые из них будут включать данные с сервера, который сериализуется в JSON и передается непосредственно в команду или используется для установки значений в токенизированных строках, которые становятся блоками сценариев и / или команды.
Этот объект должен быть доступен для любой JSP-страницы и любого серверного модуля / страницы.
Я нашел такие вопросы: где используется движок сценариев Java?, но я не хочу компилировать скрипт на сервере, я хочу вывести скрипт для использования на веб-странице. Я разработчик.Net, и я знаком с объектом ScriptManager, который используется для выполнения именно этой задачи для встроенной функциональности AJAX на веб-сайтах.Net. В другом проекте я расширил.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>
1 ответ
Javascript загружается и запускается на стороне клиента, так что это не имеет ничего общего с Java или JSP и будет одинаково справедливо для любой другой веб-технологии, включая статический html. Я бы порекомендовал загрузить файл.js в конце страницы:
...
<script type="text/javascript" src="myscript.js"></script>
</body>
</html>
и делать все, что нужно в этом сценарии. Обычно он помещает обработчик загрузки в окно для выполнения некоторых инициализаций. Скрипт также может динамически загружать больше скриптов, если это необходимо.