Grails Строительные леса Выбрать - PullRequest
0 голосов
/ 20 января 2012

У меня проблемы с производительностью при использовании тега. В некоторых таблицах базы данных у меня есть тысячи записей, и когда я пытаюсь отредактировать какое-то поле в 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
    }
}

Будут оценены любые идеи:)

1 Ответ

0 голосов
/ 20 января 2012

Вы можете сделать общий hql для автозаполнения, выполнив поиск во всех полях классов вашего домена с помощью DefautlGrailsDomainClass.getPersistentProperties ().Это, вероятно, будет иметь ужасную производительность для больших наборов данных, но это будет достаточно гибко, так что вам не нужно будет касаться одной строки ваших доменов или писать конкретные запросы для каждого домена.

Используйте grails install-templates и измените шаблоны, используемые для строительных лесов, не нужно взламывать код grails, если вы сами.

Вот документы: http://grails.org/doc/2.0.x/ref/Command%20Line/install-templates.html

...