Я создаю простое веб-приложение 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>
три строки вниз, так что, ну, в общем, едва ли они закрыты: (