legacy-knowledge-base
公開されました Sep. 10, 2025

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

written-by

Marcos da Silva Xavier

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

  • 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 で取得されない

did-this-article-resolve-your-issue

legacy-knowledge-base