如何使用BootStrap.groovy在gsp中制作下拉列表

时间:2014-05-23 09:04:39

标签: grails

我想使用BootStrap.groovy中提供的数据进行下拉。

我的城市域类

package city.model

   class City  {

        String cityName

        static constraints = {

                cityName(maxSize: 50) }
    }

在我的服务类

public class CityService {

def citySelect(String cityName) //this is just a sample
{
City city = new City()
city.cityName = city.findByCityName(cityName)
}
}

控制器

public class CityController {
def cityService
def 
def selCity() {
def selectCity =  cityService.citySelect(params.cityName){
if(selectCity != null){
render view // my view
}
else{
render view // error select again view
  }
 }
}

BootStrap.groovy中

import city.City;
class BootStrap {

    def init = { servletContext ->

        for(String cityName in ['Addis Ababa', 'Semera','Asosa','Gondar', 'Jijiga','Harar', 'Dire Dawa', 'Bahir Dar',
            'Hawassa', 'Arba Minch', 'Adama', 'Mekelle']) {

            City.findOrSaveByCityName(cityName).save()
        }
    }
    def destroy = {
    }
}

我用过这个

<g:select name="cities" from="${City.list()}" optionKey="id" optionValue="cityName"/>
 in my view but showing error    cannot envoke method list on null object

mu代码有什么问题,我该怎么做才能使它工作。请任何建议

4 个答案:

答案 0 :(得分:1)

<g:select name="city" from="${city.model.City.list()}" optionValue="${cityName}" 
      noSelection="['':'-Please select the City-']" optionKey="id"/>

这可以正常工作。

答案 1 :(得分:0)

也许你误解了Bootstrap的观点。

根据命名约定,Bootstrap是在您的站点启动时触发的部分。

您通常会使用它来确保在启动之前生成所需的db表记录,即管理员帐户或在某些城市的情况下生成。

您不会使用Bootstrap与您以编辑或选择方式生成的记录进行交互。

一旦完成所有操作并保存 - 您还可以使用控制器/视图列出/查看/更新/添加城市。

您可以在这些视图和匹配的控制器中创建g:select标签,这些控制器将查询您通过bootstrap保存的记录

<强> E2A:

好的,请阅读您的评论

使用gsp顶部的导入

<%@ page import="city.City" %>

或调用City domainClass的完整打包路径 city.City.list

<g:select name="cities" from="${city.City.list()}" optionKey="id" optionValue="cityName"/>

答案 2 :(得分:0)

这应该有效:

<g:select name="cities" from="${city.model.City.list()}" 
    optionKey="id" optionValue="cityName"/>

但是,建议不要在GSP中执行city.model.City.list()等查询。相反,您应该在控制器操作或服务中检索您的数据(城市列表),并通过模型将其传递给GSP。

答案 3 :(得分:0)

创建您在Bootstrap.groovy中插入数据库的城市列表(在视图中[viewName] .gsp)

标记是这样的

<g:select name="city" from="${city.model.City.list()}" value="${city.name}" 
      noSelection="['':'-Please select the City-']" optionKey="id"/>

但是,Bootstrap应该用于初始化数据库和应用程序的默认值,也用于执行启动(在关闭时在关闭时启动init关闭)。