0

ローカル プラグインの同じドメイン クラスを使用する 2 つの grails プロジェクト (管理バックエンドとフロントエンド) があります。

フロントエンドとバックエンドで異なるビューが必要です。たとえば、ドメイン クラス Event があります。各プロジェクトで、GenerateViews を使用しています。次に、生成された gsp を変更します。例として、list.gsp を取り上げます。フロントエンドでは、アクションを削除してビューとコントローラーから新しいイベントを作成し、バックエンドではそれらを保持します。これは、フロントエンドではユーザーがイベントのリストのみを表示できるようにする必要があるためです。バックエンドでは、管理者がフロントエンドに表示される内容を作成および変更します。これは私が得る構造です:

プロジェクト ドメイン

  • ドメイン/grails-app/ドメイン/myapp/Event.groovy

プロジェクトのフロントエンド (grails.plugin.location.'domain' = "../domain")

  • フロントエンド/grails-app/コントローラー/myapp/フロントエンド/EventController.groovy
  • frontend/grails-app/views/event/list.gsp (編集/作成アクションへのリンクはありません)

プロジェクトのバックエンド (grails.plugin.location.'domain' = "../domain")

  • バックエンド/grails-app/コントローラー/myapp/バックエンド/EventController.groovy
  • backend/grails-app/views/event/list.gsp (編集/作成へのリンク...)

しかし、run-app を使用してフロントエンド アプリケーションを実行し、リストに移動すると、コントローラーが呼び出されます。

def listEvents(Integer max) {

    params.max = Math.min(max ?: 10, 100)
    [eventInstanceList: Event.list(params), eventInstanceTotal: Event.count()]

}

その結果、frontend/grails-app/views/event/list.gsp の代わりに backend/grails-app/views/event/list.gsp がレンダリングされます。

ビューを生成しているときに、すでに混乱が始まっています。したがって、バックエンド プロジェクト内で domain/grails-app/domain/myapp/Event.groovy のビューを生成すると、すべて問題ありません。ビューはバックエンド プロジェクト内に作成され、意図したとおりに機能します。

次に、フロントエンド プロジェクトに移動し、domain/grails-app/domain/myapp/Event.groovy のビューを生成します。今度は、grails はビューが既に存在することを通知し、それらを置き換えるかどうかを尋ねます。はいと言った場合、何も置き換えませんが、フロントエンド プロジェクトでビューを作成します。本当に奇妙です。

これに関連する古いバグ レポートがあることがわかり、新しいバグ レポートを作成しました ( http://jira.grails.org/browse/GRAILS-9920 )。

それまでの間、これを回避するにはどうすればよいですか? コントローラーのメソッドとビューの名前を変更することもできますが、もっと良い方法があることを願っています。同じ名前のビューが別のプロジェクトのビューをオーバーライドする可能性があるのは奇妙に思えます。それとも、run-app を使用している場合にのみ、そのようなことが起こりますか?

私は Grails を初めて使用するので、明らかな何かを見落としている可能性がありますが、これは本当に恐ろしいことです。なぜなら、一方のプロジェクトを変更して他方のプロジェクトのアクションを誤って公開してしまう可能性があるからです。

4

0 に答える 0