問題
- 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 で取得されない
会員限定記事
Liferay エンタープライズ サブスクリプションをお持ちのお客様は1500件を超えるベストプラクティス、トラブルシューティング、その他のソリューション記事を閲覧できます。ログインすると、記事全体をお読みいただけます。
ログイン