Как удалить элементы HTML перед загрузкой страницы на XPage

У меня есть XPage, который можно использовать для редактирования или просто чтения в зависимости от роли пользователя. Теперь мне нужно реализовать эту функцию. Решение действительно простое — просто удалите добавление, редактирование и другие элементы HTML. Проблема в том, что я могу выполнять только код SSJS, но не CSJS при загрузке страницы. Когда я попытался сделать это так document. в SSJS, это дало мне предсказуемое исключение - document не распознано. Как мне выполнить его при загрузке страницы?


person J.Doe    schedule 12.02.2018    source источник


Ответы (2)


Не пытайтесь удалить элементы HTML с отображаемой страницы.

Вместо этого используйте свойство "rendered", чтобы определить, какие элементы управления должны отображаться в зависимости от прав пользователя. («Обработано» означает создано и отправлено в браузер.)

Вы можете установить это свойство здесь

введите описание изображения здесь

или здесь

введите описание изображения здесь

Вставьте туда код SSJS, который должен возвращать true (= видимый) или false (= невидимый).

person Knut Herrmann    schedule 12.02.2018
comment
Да, это решение выглядит намного умнее, спасибо! - person J.Doe; 12.02.2018
comment
Вот вопрос о «видимости». Он только скрывает или, другими словами, заставляет dislpay:none или вообще не включает элемент? Потому что мне нужно, чтобы он полностью отсутствовал на странице - person J.Doe; 12.02.2018
comment
Это последнее. Не отображаемые элементы вообще отсутствуют на странице. - person Knut Herrmann; 12.02.2018

Порядок загрузки страниц следующий (события XPages выделены жирным шрифтом):

  • серверная карта всех компонентов XPage и связанных с ними пользовательских элементов управления загружается в память
  • beforePageLoad: серверный код разработчика работает с этими компонентами.
  • компоненты на стороне сервера повторяются и обновляются на основе вычислений или привязок к внутренним документам.
  • afterPageLoad: серверный код разработчика работает с этими компонентами.
  • beforeRenderResponse: серверный код разработчика работает с этими компонентами (использование этого события означает, что оно также обрабатывается во время любых частичных обновлений).
  • ответ рендеринга повторяет компоненты и обрабатывает HTML для передачи в браузер
  • afterRenderResponse: серверный код разработчика работает с компонентами

Как видите, SSJS работает только с картой компонентов на стороне сервера, а не с DOM на стороне клиента. Если вы хотите изменить это, вы можете использовать onClientLoad, но я не думаю, что это запускается после частичного обновления. Таким образом, ваши изменения в DOM могут быть потеряны после частичного обновления (вам нужно будет проверить). Если вы хотите, чтобы изменения в элементах DOM сохранялись, есть два варианта:

  1. Используйте 1_. jQuery может иметь соответствующий вызов, который можно использовать.
  2. Напишите средство визуализации на Java, чтобы изменить HTML-код, выводимый для определенного типа компонента.

Похоже, ваши сильные стороны находятся на стороне клиента, поэтому первое может быть лучшим вариантом.

person Paul Stephen Withers    schedule 12.02.2018
comment
Это очень аккуратное и краткое описание событий загрузки страницы. Это должно быть в следующем издании любой книги XPages! - person TrailDragon; 07.03.2018