Вы можете запустить свой SSJS, как обычно. Добавьте код CSJS в oncomplete
свойства обработчика событий в ссылке ...
<xp:link ....>
....
<xp:eventHandler oncomplete="location.href='http://...url...'">
... other stuff ...
</xp:eventHandler>
</xp:link>
Это позволит убедиться, что ваш код SSJS работает, прежде чем клиент съезжает страницу.
UPDATE:
Если целевая страница будет открыта на новой вкладке и window.open блокируется блокировщики всплывающих окон, есть один вариант для запуска SSJS кода с помощью дополнительного запроса Ajax к XAgent. Мы реализовали такое решение на OpenNTF Collaboration Сегодня сайт и Никлас Хайдлофф объясняет, как это работает в NotesIn9 видео:
http://notesin9.com/index.php/2012/09/25/notesin9-078-xpages-and-counting-clicks/
В виде custom control где отображать ссылки на контент, мы запускаем функцию CSJS logClick()
которая работает только до навигации:
<xp:link
value="#{javascript:compositeData.link}"
text="#{javascript:compositeData.title}"
target="_blank"
id="link6">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[
var baseUrl = "#{javascript:var baseUrl = context.getUrl().toString();baseUrl = baseUrl.substring(0, baseUrl.indexOf('.nsf')+4);baseUrl }";
var url = baseUrl + "/log.xsp?" + "nid=" + "#{javascript:compositeData.nID}";
logClick(url);
]]></xp:this.script>
</xp:eventHandler>
</xp:link>
logClick()
функция определена в layout custom control и просто выбросить запрос Ajax. Если вы заметили, мы готовим URL-адрес в log.xsp?nid=ID_OF_ENTRY
. log.xsp - это XAgent, и он принимает данные идентификатора и сохраняет событие 'clicked'. В этом примере мы использовали кеширующий компонент, но вы можете запускать любые SSJS или Java в XAgent. Ему не нужно возвращать данные. Здесь вы также можете использовать компонент RPC.
, но я хочу, чтобы открыть ссылку в новой вкладке. как это работает – user2316219
В таком случае у вас будет два варианта. Во-первых, вы создали бы промежуточную страницу, страницу стиля XAgent, которая записывает, какая страница будет нажата и перенаправляет пользователя на нужную страницу. Во-вторых, вы должны использовать компонент RPC, асинхронно отправляя событие «нажатие на страницу», когда пользователь переходит на другую страницу на новой вкладке. Мы внедрили второй метод CollaborationToday, я обновляю ответ ссылками. –
Обновлен ответ. Извините за мою ошибку, я снова посмотрел на код, мы не используем RPC-компонент в CT. Но это также было бы альтернативой нашему подходу. –