2016-06-20 2 views
0

私はGrails 3を使用しており、残りのウェブサイトの概要を含むテンプレートページで作業しています。 Iおよびthe official documentationによって推奨されているように、次のコードを使用して、コントローラからメソッドを呼び出そうとしています:Grailsコントローラメソッドを呼び出すことなく、

<g:include controller="layouts" action="loadUsers" /> 

次のように私のコントローラはなります

class LayoutsController { 

    def loadUsers() { 
     println("we are in here") 
    }  

} 

include文は上の実行されます場合には私はそのビュー/ GSPページを持っていないよう

[http-nio-8443-exec-4] ERROR o.a.c.c.C.[.[.[.[grailsDispatcherServlet] - Servlet.service() for servlet grailsDispatcherServlet threw exception 
javax.servlet.ServletException: Could not resolve view with name 'loadUsers' in servlet with name 'grailsDispatcherServlet' 

は勿論、エラーは、理にかなって:私の埋め込まれたTomcatは、私は次のエラーを取得します。バックエンドにいくつかのものを作成するメソッドを呼び出すだけで、gspページに結び付けるのではなく、単に呼び出すだけです。これは可能ですか?基本的には、JSFと同様のアプローチで、Beanのパブリックメソッドを実行できます。

+0

あなたは 'def loadUsers(){render 'ok'}'のようなものをお探しですか? – injecteer

答えて

1

コントローラアクションが呼び出されると、アクションがredirectまたはrenderのようなものを呼び出さない限り、ビューがレンダリングされます。これは、設計上、コントローラの動作がどのように動作するのかということです。ビューが存在しない場合、エラーが発生します。

あなたが何をしようとしているのかは明らかではありませんが、単にロジックを呼び出そうとしているだけで、GSPからやっているのは珍しいことですあなたが達成しようとしていることを何でもしているカスタムGSPタグを呼び出すことによってそれを行うことができます。通常、そのようなことのすべては、ビューがレンダリングされる前に行われます(したがって、GSPコードが関係する前に)。

+0

あなたのコメントJeffに感謝します。あなたが何を述べているのか理解している間、私はgspとサーバー側の方法の間でブリッジを結ぶ方法について混乱しています。たとえば、メニュー項目を動的に表示します。私には、ウェブサイトのテンプレートにいくつかのステートメントを実行して、メニュー内のどの項目が存在し、どの項目が存在してはならないかを特定するのが理にかなっています。今では、すべてのビュー/コントローラにそれを結びつけるのではなく、どのアイテムを表示するべきかを見つけるためにテンプレートを呼び出すように指示します。正しいアプローチが何であるかを説明するためにこの例を拡張できますか? – angryip

+0

私はあなたがあなたのレイアウトを使ってそのすべてを行うことができると思う、あなたは必要に応じて異なるセクションの異なるレイアウトを持つことができます。それらのテンプレートは、あなたが話している必要な論理を実行することができます。それはメインページ変数を共有します。あなたが探しているもののロジックをタグlibにラップし、必要ならばこのタグをlibと呼ぶことに失敗しました。私は仕事の最小量から最初のメソッドをお勧めします@angryip – Vahid

+1

@angryip通常、ビューがレンダリングされる前にその条件付きのものの大部分を行い、ビューに利用可能になるモデルに必要なすべてのデータを入れます。ビューのレンダリング時間までそれらのいくつかを延期することが理にかなっているケースがあり、それらのケースの多くでカスタムGSPタグが整然としたものになるでしょう。たとえば、 ''というタグがあり、 'renderMenu'タグは必要なデータを取得するために必要な処理を実行できます。 –

関連する問題