13

インスタンスが実行されている実行モードをプログラムで知るにはどうすればよいですか? インスタンスの実行モードに応じて構成を提供するカスタム タグを作成しましたが、現在の実行モードを特定できません。
run-mods インスタンスのリストを返すメソッドを見つけました:

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

しかし、オブジェクト SlingSettings または BundleContext を取得できません。これらのオブジェクトを取得するにはどうすればよいですか、または現在の実行モードを取得する別の方法があるのでしょうか?

4

7 に答える 7

17

SlingSettings は正しい方法です。Java から取得する最も簡単な方法は、SCR @Component であるクラスで SCR @Reference アノテーションを使用することで、BundleContext を経由する必要がなくなります。

Sling スクリプトからの場合は、sling.getService(....) を使用して SlingSettings を取得できます。

実行モードを読み取る必要があるケースはまれであることに注意してください。通常は、実行モードに依存するように OSGi 構成をセットアップし、それに基づいて OSGi コンポーネントに動作を変更させます。

于 2012-09-03T19:52:47.767 に答える
10

最後に、global.jsp を使用し、ページ コンテキストで実行モードを記述して、クラスで取得することにしました。

<%
pageContext.setAttribute("runModes", sling.getService(SlingSettingsService.class).getRunModes().toString());
%>
于 2012-09-05T11:58:56.203 に答える
6
import java.util.Set;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
import org.apache.sling.settings.SlingSettingsService;

public class myClass {
    public static Set<String> getRunModes() {
        BundleContext bundleContext = FrameworkUtil.getBundle(myClass.class).getBundleContext();
        ServiceReference serviceReference = bundleContext.getServiceReference(SlingSettingsService.class.getName( ));
        SlingSettingsService slingSettingsService = (SlingSettingsService)bundleContext.getService(serviceReference);
        return slingSettingsService.getRunModes();
    }
}
于 2012-09-12T09:40:38.877 に答える
3
@Reference
RunMode runmode;

また

sling.getService( RunMode.class )

そして電話する

getCurrentRunModes(); //returns String[]
于 2013-06-07T16:57:54.643 に答える
2

Sightly を使用していて、WCMUsePojo を拡張するクラスを使用している場合

slingSettings =this.getSlingScriptHelper().getService(SlingSettingsService.class);
    Set<String> runmodes = slingSettings.getRunModes();
于 2015-11-14T18:06:37.217 に答える
1

これを試すこともできます:

RunModeService runModeService = getSlingScriptHelper().getService(RunModeService.class);
author = runModeService.isActive("author");
于 2018-05-27T14:01:46.723 に答える