#javascript #ajax #jsp #spring-mvc
#javascript #ajax #jsp #spring-mvc
Вопрос:
У меня есть веб-приложение, структурированное следующим образом:
Главная страница с n ссылками и структурой с вкладками
Каждая ссылка открывает вкладку в структуре с вкладками главной страницы и с помощью ajax загружает страницу во вкладке
Поскольку для каждой страницы требуются разные функции javascript (в основном для инициализации) в полной функции загрузки ajax, я загружаю скрипт .js и выполняю его.
Теперь у меня проблема: мне нужен текстовый редактор на одной из этих вкладок, поэтому я выбрал TinyMCE. Его нужно инициализировать, но только один раз, иначе он выйдет из строя. Теперь мне нужен способ проверить, сколько раз пользователь открывал вкладку.
Я искал области переменных в jsp и нашел «Область сеанса». Я знаю, что переменные сеанса на стороне сервера недоступны для клиентов, но эти переменные области действия сеанса в jsp являются клиентскими, поэтому я подумал, что буду использовать переменную сеанса на стороне jsp, чтобы подсчитать, сколько раз пользователь нажимает на ссылку.
В основном jsp я помещаю:
<c:set var="timesEditorLoaded" value="0" scope="session" />
Ссылка, которая открывает редактор:
<a tabindex="22" id="proposte_propostaTesto_a" class="colorbox" href="${pageContext.request.contextPath}/editorPopup?hiddenCallerFormElementId=proposte_propostaTestoamp;" onClick="incrementEditorVariable();">Apri editor</a>
Функция incrementEditorVariable() является:
<script type="text/javascript">
function incrementEditorVariable()
{
alert("incrementEditorVariable: " timesEditorLoaded);
timesEditorLoaded = timesEditorLoaded 1;
}
</script>
но в Chrome я получаю:
Uncaught ReferenceError: incrementEditorVariable is not defined
Если я помещу функцию incrementEditorVariable во внешний файл .js, как я могу получить доступ к переменной сеанса, хранящейся в jsp?
Есть ли способ добиться этого?
Заранее благодарю!
Комментарии:
1. Решение должно быть чистым javascript. Не путайте переменные на стороне сервера.
2. Как я писал в сообщении, я говорю о переменных на стороне клиента. Я имею в виду это —> java-samples.com/showtutorial.php?tutorialid=1009
3. @Andrea Нет, вы говорите не только о переменных на стороне клиента — переменные сеанса являются серверными, как и переменные, созданные с помощью тега JSP. timesEditorLoaded — это переменная на стороне сервера.
4. У вас есть пробелы между тегом start и tagname . Это недопустимый синтаксис.
5. Я знаю, я сам разместил их, чтобы опубликовать код здесь, иначе система не позволила бы мне ввести их.
Ответ №1:
Вы можете изменить событие onclick, когда пользователь нажимает на кнопку. Кажется немного дерьмовым, но может решить все, если onclick заботится только об одном.
Комментарии:
1. Я не понимаю.. В опубликованном мной onclick я вызываю функцию javascript incrementEditorVariable() . Я также пробовал onClick = «${timesEditorLoaded} = incrementEditorVariable();» но безуспешно.. Можете ли вы более подробно объяснить свой комментарий о том, что нужно изменить?
2. Я имею в виду что-то вроде этого: btnOnlyOnce.onclick=function(){doIt();btnOnlyOnce.onclick=»»;} Это способ предотвратить более одного взаимодействия с элементом управления. Раньше я делал это для некоторых игр и скриптов JS, которые требуют делать что-то только один раз.
Ответ №2:
В итоге я добавил переменную сеанса в архитектуру MVC и выполнил эту задачу. Я делал это, чтобы попытаться исправить ошибку, я подсчитал, сколько раз пользователь нажимал на ссылку, чтобы предотвратить инициализацию n-раз экземпляра TinyMCE, но это не решило проблему с тем, что меню оставались открытыми.