2011-01-15 4 views
2

ビルドしているサイトのページフッターにトプリストを作成する必要があります。フッタは、デフォルトのSiteMeshレイアウトテンプレート(views/layouts/main.gsp)で作成されます。GrailsのSiteMeshテンプレート(views/layouts/main.gsp)からサービスレイヤにアクセスするにはどうすればよいですか?

データベースへのアクセス権を作成するには、サービスクラス(services/FooService)にトプリスト作成に必要なすべてのロジックをカプセル化しました。

通常、サービスはコントローラレイヤーからアクセスされますが、この場合、デフォルトのレイアウトテンプレート(views/layouts/main.gsp)はがコントローラから生成されたではありません。

  • レイアウトビュー(views/layouts/main.gsp)はサービスクラスにアクセスできますか?どうやって?
  • これは正しいデザインの決定ですか?そうでない場合は、より優れたカプセル化とはどのようにレイアウトビュー(views/layouts/main.gsp)からのカプセル化と対話するのですか?

答えて

8

フッターの描画をラップするタグライブラリ(documented here)を作成することをお勧めします。同じ名前のフィールドを宣言するだけで、タグライブラリクラスにサービスを注入できます。

サービスから必要なものを入手し、直接またはそれ以上の結果を出力するか、_footer.gsprender itrender template: 'footer', model: [yourmodel: model]としてください。

+0

SiteMeshレイアウトテンプレート(この場合はviews/layouts/main.gsp)からタグlibを使用できますか? – knorv

+0

確かなタグは、テンプレート内から使用するように設計されています。彼らはあなたのバージョンです(例えば) '' –

+0

そしてtagLibコールの出力をキャッシュします – mfloryan

0

ビューからではなく、コントローラからサービスにアクセスする必要があります。

+0

あなたの答えをありがとうが、デフォルトのテンプレート(views/layouts/main.gsp)がコントローラからレンダリングされていないので、それは私の問題を解決しません。 – knorv

関連する問題