【发布时间】:2012-01-21 02:29:07
【问题描述】:
我在使用标签时遇到了性能问题。在数据库中的某些表中,我有数千条记录,当我尝试在 Grails 中编辑某些字段时,标签会生成表中所有记录的下拉列表,这会导致真正的性能问题,有时甚至会出现 EndOfMemorryError。生成的 html 很大,我尝试实现一个自动完成方法来列出,但结果并不令人满意,因为我希望这是我的 300 个 Java 类的全局解决方案,如果我使用自动完成,我必须为它编写我的每一堂课,现在我的想法是尝试使用弹出窗口更改下拉列表,这些弹出窗口使用分页显示记录。我相信我必须在 renderEditor.template 中更改此代码:
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
}
}
任何想法将不胜感激:)
【问题讨论】:
-
FWIW,可能(值得怀疑,但可能)有一个现有的constraint widget 可以帮助你。但是,我不知道可能的小部件列表是什么。我已经added a bounty to this question 希望得出一个答案。
标签: java hibernate grails select pagination