2010-12-16 11 views
0

私は、とりわけユーザがドキュメントをアップロードできるようにするアプリケーションを構築しています。私は、基本的な作成/表示アクションは正常に動作していますが、私はこのアクションを他の場所で再利用したいと思います。Grails:アクションの再利用

誰かがこれを行う方法のためのポインタを持っているかどうかを知りたいです。これを行うための非常に良い方法ではないようです。ここで

私が考えられてきたいくつかの方法があります。

  1. )が(チェーンを行うようにしてください。連鎖はGETを行い、アップロードするにはPOSTが必要なので、これは機能しません。
  2. メインのビジネスロジックをGrailsの "サービス"に分割し、同じコードを使用する2つのアクションを作成します。
  3. JSモーダルウィンドウを使用します。私は、ドキュメントのアップロードの "スキン"バージョンへのiframeを含むモーダルを考えてきました。ここでのトリックは、アップロードが完了したときにウィンドウを閉じることです。

おかげ

--Matthias

答えて

5

拡張コントローラのメソッドは気にしません。実際、私は可能な限り継承を避けています。私はむしろサービスクラスに共通コードを置き、そのように再利用したいと思います。

+0

私はこれを試してきましたが、リクエストストリームからファイルを取得するために、私はこのようなAPIを作る必要がありました。 "def Document saveDocument(request、params)"。興味深いのは、私がこのロジックを再利用しようとしている場所がWebフォームにあるため、「要求」オブジェクトが異なっているように見えます。通常のCRUDコントローラでは、org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest(「getFile()」メソッドを持っています)、webflowからorg.apache.catalina.core.ApplicationHttpRequestオブジェクトを取得します。私はそれを理解しようと思うだろう。 – mlathe

+0

Akk ...私はこの「間違ったHTTPServletRequest」問題を解決しました。私は2つの

タグを一緒に入れ子にしていました。したがって、ファイルは*** enctype = "multipart/form-data" ***パラメータでアップロードされていませんでした – mlathe

1

あなたはベースコントローラクラスを使用して、そこに共通の機能を配置することができます。その後、ベースコントローラーを拡張し、他のアクションメソッドからメソッドを呼び出します。

+0

私の答えは、これが悪い方法であるとは示唆していませんでした。単に別のオプションを与えることです。 – Gregg

+0

そうです...この解決策も有効です。トリックはこれをどのように進めるかです。これらの「共有」アクションがたくさんある場合、基本クラスは扱いにくいものになります。しかし、ありがとう。 – mlathe