Жуткая странная ошибка

#grails #groovy

Вопрос:

  class Area {

        String name
        String description

        static constraints = {
        }
 

_

  class SearchIndexing {

        String search
        Area area

        static constraints = {
        }
    }  
 

_

  <%

            def area = cm.Area.get(1)

            def si = new cm.SearchIndexing()

            def concat   

            concat = area.name // i wanna join here more things with much bigger class

            si.search = concat
            si.area = area
            si.save()

            out << searchIndexing.list()

            %>
 

ошибка:

 No signature of method: cm.SearchIndexing.save() is applicable for argument types: () values: [] Possible solutions: wait(), any(), wait(long), any(groovy.lang.Closure), isCase(java.lang.Object), use([Ljava.lang.Object;) 
 

Ответ №1:

Конечно, у вас нет начального знака , т. е.:

 def temp =   obj2.prop1   " "   ...
 

Почему бы не попробовать более классный способ, например:

 def temp = "$obj2.prop1 $obj2.prop2 ..."
 

Или:

 def temp = [ obj2.prop1, obj2.prop2 ].join( ' ' )
 

Комментарии:

1. я обновил пример с реальной проблемой. пожалуйста, взгляните сейчас. Я пытаюсь сделать это, потому что это не сработало в контроллере, это дало мне ту же ошибку, поэтому я решил попробовать в меньшем классе в заводном стиле внутри страницы gsp.

2. @Виктор , я даже не уверен, что ты сможешь сделать то, что пытаешься в a gsp , это должно быть в контроллере. Даже если это возможно, смешивание презентации и логики всегда оказывается действительно плохой идеей…

Ответ №2:

Из того, как вы создаете экземпляр SearchIndexing

 def si = new cm.SearchIndexing()
 

похоже, это внутренний класс. Я не думаю, что доменный класс может быть внутренним классом, что объясняет, почему у него нет save() метода.