Управление блоком скрипта / выводом команды для веб-страниц в 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>

и делать все, что нужно в этом сценарии. Обычно он помещает обработчик загрузки в окно для выполнения некоторых инициализаций. Скрипт также может динамически загружать больше скриптов, если это необходимо.

Другие вопросы по тегам