Внутренняя ошибка сервера при попытке доступа к представлению шоу в Grails с помощью RestfulController - PullRequest
0 голосов
/ 26 февраля 2019

Я создаю простое веб-приложение Grails 3, которое должно работать с базой данных Oracle 12c.У меня есть несколько таблиц без явного столбца идентификатора, поэтому я должен использовать составной ключ и, следовательно, также написать свои собственные контроллеры, потому что тогда скаффолдинг не работает.Вот пример класса домена, который я хотел бы обработать:

class AliasFrequencyDict implements Serializable{
    String frequency
    String unit
    String description
    String lang

    static constraints = {
        frequency maxSize: 10, sqlType: 'VARCHAR2'
        unit maxSize: 1, sqlType: 'VARCHAR2'
        description maxSize: 30, sqlType: 'VARCHAR2'
        lang maxSize: 2, sqlType: 'VARCHAR2'
    }

    static mapping = {
        sort 'frequency'
        version false
        id composite: ['frequency', 'unit', 'lang']
    }

    Map<String, String> getPK()
    {
        ['frequency': frequency, 'unit': unit, 'lang': lang]
    }
}

И хотя представление списка работает нормально, когда я задаю свойства в коллекции index.gsp properties, я бы хотелчтобы все действия CRUD также работали.Поскольку переписывание всего из стандартного шаблона строительных лесов звучало для меня очень сложно, будучи новичком в Grails, я решил попробовать и сделать это с Restful Controller , как это выглядитнужно меньше кода и явной логики.Вот мой код контроллера:

@Transactional(readOnly = true)
class AliasFrequencyDictController {
    def index(String frequency, String unit, String description, String lang) {
        params.frequency = frequency
        params.unit = unit
        params.description = description
        params.lang = lang

        respond AliasFrequencyDict.list(params), model:[aliasFrequencyDictCount: AliasFrequencyDict.count()]
    }

    def show(String frequency, String unit, String language) {

        def aliasFrequencyDict = AliasFrequencyDict.list() /*AliasFrequencyDict.get( new AliasFrequencyDict(params) )*/

        if(aliasFrequencyDict == null) {
            render status:404
        }
        else {
            return [aliasFrequencyDict: aliasFrequencyDict]
        }
    }
}

... и все же, когда я пытаюсь получить доступ, скажем, http://localhost:8080/aliasFrequencyDict/show?frequency=0&unit=Q&lang=EN, я получаю:

Error 500: Internal Server Error
URI:/aliasFrequencyDict/show
Class:javax.servlet.ServletException
Message:Could not resolve view with name 'show' in servlet with name 'grailsDispatcherServlet'

Почему это так?Как мне подойти к исправлению этого?

РЕДАКТИРОВАТЬ: ОК, дальше всего я смог продвинуться вручную, добавив show.gsp в папку просмотра aliasFrequencyDict, но это только изменяет ошибку,не решает это.Так что теперь это:

URI:/aliasFrequencyDict/show
Class:org.grails.taglib.GrailsTagException
Message:Request processing failed; nested exception is java.lang.Runtime
Exception: Error initializing GroovyPageViewCaused by:[grails-app\views\aliasFrequencyDict\show.gsp:23] Unclosed GSP expression

... и show.gsp:23 - это <g:form resource="\${this.${propertyName}}" method="DELETE">, у которого есть </g:form> три строки вниз, так что, ну, в общем, едва ли они закрыты: (

...