Использование возвращаемого значения JavaScript в качестве условия в тегах Struts if - PullRequest
0 голосов
/ 30 октября 2019

Я работаю над форматированием HTML с использованием struts2 и javascript и передаю возвращаемое значение функции тегу <s:if>. Я ожидал бы, что это будет вести себя как любое другое условие;однако тег <s:if> постоянно ведет себя так, как будто он возвращает false.

page.jsp

<s:if test="%{myFunction()}">
  <p>foo</p>
</s:if>
<s:else>
  <p>bar</p>
</s:else>

page.js

function myFunction() {
  if(some_condition) { return true; }
  else { return false; }
}

bar

Я тестировал функцию javascript независимо друг от друга, и она работает как задумано - и true, и false возвращаются в зависимости от условий. Функция правильно включена в код .jsp (она была определена ранее в теге <script>).

Интуитивно понятно, что я должен быть в состоянии использовать возвращаемое значение в качестве условия, но я начинаю верить, что я могу ошибаться. Документация по этому поведению довольно скудна, и официальная документация *1026* не может сказать, насколько это возможно или нет.

Это синтаксическая ошибка или я столкнулся с пределом Struts2?

1 Ответ

1 голос
/ 31 октября 2019

Это не (1) синтаксическая ошибка и (2) «ограничение» Struts 2.

  1. Если бы это была синтаксическая ошибка, вы бы получили ... синтаксическую ошибку,либо на стороне сервера в журналах, либо на стороне клиента в консоли JS.
  2. S2 - это стандартная веб-инфраструктура Java на основе действий;он ничего не знает на стороне клиента: нет (прямого) взаимодействия между тем, что происходит на сервере, и тем, что происходит на клиенте (например, браузер).

TL; DR: Страницы JSP запускаются на сервере. JavaScript работает на клиенте. Прямого соединения нет.

Страницы, отправленные клиенту, обрабатываются до отправки , до запускается любой JavaScript и т. Д. Серверная сторона ничего не знает о JavaScriptна твоей странице. (Вот почему вы можете визуализировать теги S2 в JS, который затем используется кодом, как только он окажется на клиенте.)

Если вы хотите иметь возможность динамически отображать элементы DOM, тогда все должно обрабатываться на стороне JS,хотя ваш код JS может включать теги S2.

Это базовый элемент веб-приложения Java: файлы JSP - это просто шаблоны. Они полностью отображаются перед отправкой клиенту в качестве ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...