2015-11-04 4 views
0

У меня есть следующий класс домена:Grails: метод Вызывающую домена от GSP

package com.example 

class Location { 
    String state 

    def getStatesList(){ 

    def states = ['AL','AK','AZ','AR','CA','CO','CT', 
     'DC','DE','FL','GA','HI','ID','IL','IN','IA', 
     'KS','KY','LA','ME','MD','MA','MI','MN','MS', 
     'MO','MT','NE','NV','NH','NJ','NM','NY','NC', 
     'ND','OH','OK','OR','PA','RI','SC','SD','TN', 
     'TX','UT','VT','VA','WA','WV','WI','WY'] 
    return states 
    } 
} 

В моей GSP, я пытаюсь отобразить список состояния в выбранном раскрывающемся списке в качестве такого

<g:select name="location.state" class="form-control" from="${com.example.Location?.getStatesList()}" value="${itemInstance?.location?.state}" noSelection="['': '']" /> 

В при этом я получаю «исключение исключаемого метода»

Если я изменю метод со списком, я больше не получаю ошибку, но я не хочу этого.

from="${com.example.Location?.list()}" // works 
from="${com.example.Location?.getStatesList()}"  // does not work 

Любая помощь очень ценится.

+2

'getStatesList()' должен быть объявлен 'static' так, как вы пытаетесь использовать. – dmahapatro

ответ

1

Как сказал дмахаптро, вы можете исправить эту проблему, сделав getStatesList() статическим методом.

class Location { 
    String state 

    static List<String> getStatesList() { 
     ['AL','AK','AZ','AR','CA','CO','CT', 
     'DC','DE','FL','GA','HI','ID','IL','IN','IA', 
     'KS','KY','LA','ME','MD','MA','MI','MN','MS', 
     'MO','MT','NE','NV','NH','NJ','NM','NY','NC', 
     'ND','OH','OK','OR','PA','RI','SC','SD','TN', 
     'TX','UT','VT','VA','WA','WV','WI','WY'] 
    } 
} 

Тогда вы будете в состоянии выполнить Location.statesList или Location.getStatesList().

Alternative

Я думаю, уборщик альтернативой является использование конечной постоянной:

class Location { 
    String state 

    static final List<String> STATES = 
     ['AL','AK','AZ','AR','CA','CO','CT', 
     'DC','DE','FL','GA','HI','ID','IL','IN','IA', 
     'KS','KY','LA','ME','MD','MA','MI','MN','MS', 
     'MO','MT','NE','NV','NH','NJ','NM','NY','NC', 
     'ND','OH','OK','OR','PA','RI','SC','SD','TN', 
     'TX','UT','VT','VA','WA','WV','WI','WY'] 
} 

Затем вы можете получить доступ к списку тем же способом: Location.STATES. Разница в том, что имя all-caps означает значение, которое не изменяется (и не требует доступа к базе данных).

0

list() - это метод на метаклассе объекта домена. Чтобы сделать то, что вы пытаетесь сделать, вам нужно создать экземпляр объекта Location (или добавить в метакласс). Если бы я был вами, я лично использовал бы Enum.

0

Вы должны сделать статический getStatesList(), потому что вы не обращаетесь к экземпляру класса Location.