Использование JavaScript в теге JSP
-
04-07-2019 - |
Вопрос
Я видел этот вопрос , касающийся импорта js-файлов, связанных с сам тег содержимого. У меня похожая проблема, здесь у меня есть тег jsp, который генерирует некоторый HTML и имеет общую реализацию js, которая обрабатывает поведение этого HTML. Кроме того, мне нужно написать некоторые операторы инициализации, чтобы потом можно было использовать их через JavaScript. Чтобы можно было использовать этот & Quot; handler & Quot; в моем JavaScript это должно быть как-то доступно.
Вопрос в том ... Можно ли писать inline < script > теги вместе с моим HTML для целей создания и инициализации (лично я не думаю, что это очень элегантно)? И что касается доступности для мира JS, должен ли я оставить глобальную переменную, ссылающуюся на мой объект-обработчик (я думаю, не очень элегантно), есть ли лучшие способы сделать это? Р>
Решение
Вы должны стремиться к JavaScript в своих собственных файлах. Обычно это делается с помощью прогрессивного улучшения . Но иногда у вас нет выбора, например, когда один и тот же JSP отображает страницы на разных языках. Вот реальный пример:
JSP:
<script src="/javascript/article_admin.js"></script>
<script type="text/javascript">
NP_ArticleAdmin.initialize({
text: {
please_confirm_deletion_of: '<i18n:output text="please.confirm.deletion.of"/>',
this_cannot_be_undone: '<i18n:output text="this.cannot.be.undone"/>'
}
});
</script>
JavaScript (article_admin.js):
/*global NP_ArticleAdmin, jQuery, confirm */
NP_ArticleAdmin = function ($) {
var text;
function delete_article(event) {
var article = $(this).parents("li.article"),
id = article.attr("id"),
name = article.find("h3.name").html();
if (confirm(text.please_confirm_deletion_of + name + text.this_cannot_be_undone)) {
$.post("/admin/delete_article", {id: id});
article.fadeOut();
}
event.preventDefault();
return false;
}
function initialize(data) {
text = data.text;
$("#articles a.delete").click(delete_article);
}
return {initialize: initialize};
}(jQuery);
В этом примере единственным javascript в JSP-файле является та часть, которая должна быть там. Основные функциональные возможности разделены в своем собственном js-файле.
Другие советы
Я не совсем уверен, что вы спрашиваете здесь, но я не ошибаюсь, если включаю теги <script>
в JSP для создания кода javascript. Я часто следую этой модели, пишу код библиотеки во внешних файлах javascript, а затем вызываю конструкторы для моих объектов из тегов <=>.
Это облегчает отладку, поскольку вся логика находится во внешних файлах (и похоже, что у firebug есть проблемы с отладкой встроенного кода javascript). Библиотеки кэшируются, а данные, создающие их экземпляры, - нет (что является желаемым поведением).
Альтернатива заключается в том, чтобы код создания экземпляров динамически создавался во внешнем файле JavaScript или при вызове AJAX. Я тоже это сделал с положительными результатами.
Я думаю, решающим фактором является количество динамических данных. Если вам нужно представить большие структуры данных, я бы обслужил это с помощью вызова AJAX, который возвращает JSON. Если это простой вызов конструктора, поместите его в JSP.
Что касается глобальной переменной, у меня часто будет глобальная переменная для объекта верхнего уровня, которая запускает все. Внутри этого находятся все другие ссылки на вспомогательные объекты.
Хотя я согласен с тем, что это не совсем элегантно, я уже несколько раз делал это, комбинируя решения на стороне сервера с интегрированной средой AJAX. Вывод в строку & Lt; script & Gt; теги для того, чтобы инициализировать некоторые переменные, не страшны, если их никто не видит.
Что касается лучших методов, я не знаю об этом. Я делал это настолько редко, что не искал более элегантного или & Правильного & Quot; Решение. р>
Все в порядке с использованием тегов <script>
в соответствии с HTML. Бывают времена, когда это необходимо, но о каких-либо лучших путях я не знаю. Не делая вещи более сложными, проще использовать тег <=>, чем пытаться найти способ реализации файлов js.