Динамическое создание меню доступных лесов в Grails - PullRequest
0 голосов
/ 23 января 2019

В моем приложении Grails есть куча классов моделей, каждый из которых предназначен для динамического создания соответствующих таблиц базы данных. Для индекса приложения я хотел бы иметь меню всех этих строительных лесов, чтобы при добавлении новой модели меню обновлялось.

Существует ли какой-либо автоматический способ Grails сделать это, или я застрял с созданием наивного индексного представления с набором статически набранных g:link для каждого класса, чтобы привести пользователя к его соответствующим представлениям CRUD?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

В качестве дополнения к ответу Джошуа, следующее должно привести вас к списку контроллеров лесов, по крайней мере, в Grails 3.

<g:each var="c" in="${grailsApplication.controllerClasses.findAll{ it.isReadableProperty('scaffold') } }">
    <li><g:link controller="${c.logicalPropertyName}">${c.fullName}</g:link></li>
</g:each>

РЕДАКТИРОВАТЬ

В соответствии с просьбой в комментариях,получите имя таблицы, вам нужен доступ к sessionFactory, который вам нужно будет внедрить в контроллер, что-то вроде следующего даст вам карту доменного имени с именем таблицы домена.

Controller

class YourController {

    def sessionFactory

    def index() {
        def scaffoldedTables = grailsApplication.controllerClasses.findAll{ it.isReadableProperty( 'scaffold' ) }.collectEntries {
            [(it.name): sessionFactory.getClassMetadata(it.getPropertyValue( 'scaffold', Object.class )).tableName]
        }

        [scaffoldedTables: scaffoldedTables]
    }
}

gsp

<g:each var="c" in="${scaffoldedTables}">
    <li><g:link controller="${c.key}">${c.value}</g:link></li>
</g:each>
0 голосов
/ 23 января 2019

Вы можете просто создать их список следующим образом:

<ul>
    <g:each var="c" in="${grailsApplication.controllerClasses.sort { it.fullName } }">
    <li><g:link controller="${c.logicalPropertyName}">${c.fullName}</g:link></li>
    </g:each>
</ul>

Этот код был взят из старого проекта Grails 1.3x по умолчанию index.gsp.Не уверен, что он все еще работает в последних версиях Grails, но он должен, по крайней мере, дать вам представление о том, что вы можете сделать, что будет динамичным.

ОБНОВЛЕНИЕ Как указал Джефф Скотт Брауниз этого будут включаться ALL контроллеры, каркасные или нет, а также контроллеры, предоставляемые плагинами.Теоретически вы можете дополнительно отфильтровать получающиеся классы из grailsApplication.controllerClasses, проверяя их на предмет их пакета (при условии, что ваш домен находится в известном пакете или пакетах) и / или если они находятся в скаффолде (static scaffold = true).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...