Определить режим выполнения в Adobe CQ

Как программно узнать, в каком режиме запуска работает экземпляр? Я создал собственный тег, предоставляющий конфигурацию в зависимости от режима запуска экземпляра, но не могу определить текущий режим запуска.
Я нашел метод, возвращающий список экземпляров запускаемых модов:

SlingSettings settings = ...get from BundleContext...
Set<String> currentRunModes = settings.getRunModes();

Но я не могу получить объекты SlingSettings или BundleContext. Как я могу получить эти объекты или, возможно, есть другой способ получить текущий режим выполнения?


person Gleb    schedule 03.09.2012    source источник


Ответы (6)


SlingSettings - это правильный путь. Если это из Java, самый простой способ получить его - это использовать аннотацию SCR @Reference в классе, который является SCR @Component, что избавляет вас от необходимости проходить через BundleContext.

Если это из скрипта Sling, вы можете использовать sling.getService(....) для получения SlingSettings.

Обратите внимание, что случаи, когда вам нужно читать режимы работы, редки, обычно вы предпочитаете настраивать свои конфигурации OSGi так, чтобы они зависели от режимов работы, и чтобы компоненты OSGi изменяли свое поведение на основе этого.

person Bertrand Delacretaz    schedule 03.09.2012

В конце концов я решил использовать global.jsp, написать режимы запуска в контексте страницы и получить его в своем классе:

<%
pageContext.setAttribute("runModes", sling.getService(SlingSettingsService.class).getRunModes().toString());
%>
person Gleb    schedule 05.09.2012

@Reference
RunMode runmode;

or

sling.getService( RunMode.class )

и позвони

getCurrentRunModes(); //returns String[]
person Yura    schedule 07.06.2013

Если вы используете Sightly и работаете с классом, расширяющим WCMUsePojo

slingSettings =this.getSlingScriptHelper().getService(SlingSettingsService.class);
    Set<String> runmodes = slingSettings.getRunModes();
person Cris Rockwell    schedule 14.11.2015
comment
Пытался узнать, как получить SlingSettingsService. Успешно справился - person javaNoober; 08.12.2015

Как сказал Бертран Делакретаз, это правильный способ проверить, является ли экземпляр автором или публикацией. В jsp или java вы можете проверить как

import  org.apache.sling.settings.SlingSettingsService
Set<String> runModes = sling.getService(SlingSettingsService.class).getRunModes();

if (runModes.contains("author")) {
} 

Другой способ — использование

if (mode == WCMMode.EDIT) 
{
}

Но этот подход потерпит неудачу в режиме предварительного просмотра и не будет работать.

person Love Sharma    schedule 19.11.2015
comment
Любой может помочь с ошибкой SlingSettings не может быть разрешена ошибка. - person Love Sharma; 10.12.2015
comment
Если вы используете WCMMode в качестве проверки — в качестве альтернативы подумайте, хотите ли вы проверить mode != WCMMode.DISABLED, а не mode == WCMMode.EDIT, что должно помочь с проблемой предварительного просмотра, которую вы выделили (какой из них использовать, будет решаться в каждом конкретном случае, поскольку это, вероятно, будет зависеть от функции) - person anotherdave; 25.05.2016

Вы также можете попробовать это:

RunModeService runModeService = getSlingScriptHelper().getService(RunModeService.class);
author = runModeService.isActive("author");
person Joydeep Bhattacharya    schedule 27.05.2018
comment
Было бы полезно, если бы вы описали, почему ответ лучше/отличается от других здесь. - person Stephen Rauch; 27.05.2018
comment
Пожалуйста, обратитесь к ссылке ниже, я не утверждаю, что она лучше, но я всегда предпочитал ее, так как я мог получить много дополнительной информации, используя то же самое. helpx.adobe.com/experience- менеджер/6-3/сайты/развертывание/использование/ - person Joydeep Bhattacharya; 03.06.2018