フラグメントでOSGIサービスを呼び出す

問題

  • serviceUtilやstaticUtilで可能なように、OSGIサービスをフラグメントで直接呼び出すオプション/APIはありますか?

Environment

  • DXP 7.4

解決策

  • そうです。 serviceLocator をフラグメントのHTMLコードの中で使うことで、これを得ることができます。

    フラグメントの中で変更されるのは、 <[>]のために変更されることだけです:

    [#assign exampleServiceUtil = serviceLocator.findService("com.liferay.example.service.ExampleService") /]

    serviceLocator は、セキュリティ上の理由から、デフォルトでは制限されていることに留意してください。 これを有効にするには、次のステップに従う必要があります: Enabling serviceLocator Calls in Liferay DXP 7.0

    serviceLocator を有効化することは、セキュリティの観点からは、freemarker からすべてのサービスにアクセスできるようになるため、良くない考えであることを理解することが重要です。 つまり、サーバーサイドのコードを実行する(そしてLocalService APIにアクセスする)ためにfreemarkerテンプレートを書くことを許可されている誰でも を明示的に信頼するということです

    そのため、必要なものだけを利用できるようにするために、 TemplateContextContributors を使用することをお勧めします。 Injecting Additional Context Variables and Functionality into Your Theme Templates

    コードはとてもシンプルで、必要なものは何でも注入できます: Template Context Contributor

    その他、参考になりそうな記事: サービスビルダー以外で生成されたサービスがフリーマーカーテンプレートの ServiceLocator で取得されない

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています