2012-01-20 8 views
0

私はタグを使用しているときにパフォーマンスの問題があります。データベースのいくつかのテーブルには何千ものレコードがあり、Grailsのいくつかのフィールドを編集しようとすると、そのタグはテーブル内のすべてのレコードのドロップダウンリストを生成し、実際のパフォーマンス上の問題やEndOfMemorryErrorが発生することがあります。生成されたhtmlは膨大ですが、私はリストのオートコンプリートメソッドを実装しようとしましたが、結果は満足できませんでした。なぜなら、これは私の300 Javaクラスのグローバルソリューションでありたいと思います。私のクラスの各1つ、今私の考えは、ページ設定を使用してレコードを表示するポップアップウィンドウでドロップダウンリストを変更しようとすることです。私は私がrenderEditor.templateにこのコードを変更する必要が信じて:Grails足場選択

private renderManyToOne(domainClass,property) { 
    if (property.association) { 
     def sb = new StringBuilder() 
     sb << '<g:select' 
     // id is "x" and name is "x.id" as the label will have for="x" and "." in an id will confuse CSS 
     sb << ' id="' << property.name << '"' 
     sb << ' name="' << property.name << '.id"' 
     sb << ' from="${' << property.type.name << '.list(max: 10, offset: offset)}"' 
     sb << ' optionKey="id"' 
     if (isRequired()) sb << ' required=""' 
     sb << ' value="${' << "${domainInstance}?.${property.name}" << '?.id}"' 
     sb << ' class="many-to-one"' 
     sb << renderNoSelection(property) 
     sb << '/>' 
     sb as String 
    } 
} 

任意のアイデアが理解されるであろう:)

+0

FWIW、そこに*かもしれないの*(疑わしいが、可能)既存の[制約のウィジェット](http://grails.org/doc/2.0.x/ref/Constraints/こと:ここで

は、ドキュメントがありますwidget.html)を参照してください。しかし、私は可能なウィジェットのリストが何であるか分からない。私はうまくいけば答えを引き出すために[この質問に奨励金を加えました](http://stackoverflow.com/questions/7295811/what-widget-constraints-are-for-grails-domain-classes)。 –

答えて

0

をあなたのドメインクラス内のすべてのフィールドを検索することにより、オートコンプリートのための一般的なHQLを作ることができますDefautlGrailsDomainClass.getPersistentProperties()を使用します。これは大規模なデータセットでは恐ろしい性能を発揮しますが、柔軟性があり、ドメインの1行に触れる必要もなく、ドメインごとに特定のクエリを書く必要もありません。

grails install-templatesを使用して、スキャフォールディングに使用するテンプレートを変更します.Grailsコードをハックする必要はありません。 http://grails.org/doc/2.0.x/ref/Command%20Line/install-templates.html

+0

彼が参照した 'renderEditor.template'は*テンプレートの一つです。 –

+0

私は正確にそれらのテンプレートを変更していないので、とにかく感謝:) –

+0

申し訳ありませんが、それを取得していません。 – Raphael