Как проверить, в первый ли раз пользователь нажимает на ссылку в JSP?

#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, но это не решило проблему с тем, что меню оставались открытыми.