2011-08-10 1 views
0

Мы используем Eclipse STS для простого проекта Grails. Мы начали с чего-то простого, чтобы понять основы, и это примерно так же просто, как и получается. Проект имеет простой контроллер и java bean, подключенный через ресурсы.groovy. Независимо от того, что мы делаем, мы не можем показаться, чтобы получить боб проводную правильно, Grails жалуется, что свойство боб не доступен для записи или не может иметь геттер/сеттер ....Конфигурация Grails bean config в resources.groovy не работает в Eclipse STS

/* TestBean.groovy */ 
    class TestBean {  
     def message 
     String getMessage(){ 
      return message 
     } 
    } 

.

/* resources.groovy */ 
import com.ofi.test.TestBean; 

beans = { 
    helloWorldBean(TestBean){ 
     message = "HelloWorld" 
    } 
} 

.

/* TestController */ 
class TestController { 

    def index = { } 

    def helloWorldBean 
    def show = { 
     def message = helloWorldBean.message 
     render message 
    } 
} 

.

/* UrlMappings.groovy */ 
class UrlMappings {  
    static mappings = { 

     "/test/$var"(controller:"Test"){ 
      action = [GET: "get"] 
     } 
    } 

.

Проект компилируется, но мы получаем следующее сообщение об ошибке, когда приложение загружает в Затмении (мы даже не можем получить к контроллеру, то TestBean конфиг неисправного)

2011-08-10 11:18:55,252 [main] ERROR context.GrailsContextLoader - Error executing bootstraps: Error creating bean with name 'helloWorldBean': Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'message' of bean class [com.ofi.test.TestBean]: Bean property 'message' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'helloWorldBean': Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'message' of bean class [com.ofi.test.TestBean]: Bean property 'message' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 
    at org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:212) 
    at grails.web.container.EmbeddableServer$start.call(Unknown Source) 
    at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy:158) 
    at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy) 
    at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280) 
    at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy) 
    at _GrailsRun_groovy$_run_closure5.doCall(_GrailsRun_groovy:149) 

ответ

2

Поскольку ваш боб a groovy bean, вам даже не нужны аксессоры. Следующее должно быть прекрасно:

class TestBean { 
    def message 
} 

В вашем случае, ошибка это, вероятно, происходит потому, что message поле набирается как def, но ваша сбруя набирается как String. Если у вас должен быть аксессуар, попробуйте ввести их одинаково.

+0

Я был под впечатлением, что они не требуются в Граалей? – raffian

+0

Вероятно, это комбинация 1), только определяющая сеттер и 2) поле не более строго типизированное. –

+0

Аксессоры не требуются, добавив их не должно быть никакой разницы –

0

Вы можете добавить несколько полей в классе Bean и использовать их в контроллер как-

class TestBean { 

    static constraints = { 
    } 

    String message 
    String name 
    def demo 
} 
Смежные вопросы