Grails无法看到数据库表的内容

Grails无法看到数据库表的内容,grails,gorm,Grails,Gorm,我使用的是Grails版本2.4.4和postgresql。当我运行应用程序时,我看到错误消息无法获取空对象上的属性“myname”。我知道表不是空的,数据库连接也不正确,因为我可以使用脚手架上传和查看数据 域类代码: class My_table { //Integer id String myname static constraints = {} } 控制器代码: class My_tableController { def index() {

我使用的是Grails版本2.4.4和postgresql。当我运行应用程序时,我看到错误消息无法获取空对象上的属性“myname”。我知道表不是空的,数据库连接也不正确,因为我可以使用脚手架上传和查看数据

域类代码:

class My_table {

     //Integer id
     String myname

     static constraints = {}
}
控制器代码:

class My_tableController {

def index() {
    def my_table = My_table.list()
    [my_table:my_table] 
}
我的index.gsp文件:

<g:select name="name" from="${my_table}"/><br/>
    <label>${my_table.myname} </label><br/>

表是大多数数据库中的保留字。更改类和属性的名称或将其映射到其他非保留的对象:

static mapping = {
   table 'my_table'
}
将名为table的列添加到名为table的表是有问题的,因为在静态映射块中已存在名为table的方法。较新版本的grails有一个更灵活的ORM映射块

static mapping = {
   table 'my_table'
   table column: 'my_table' // unsure if this would work since it overlaps with the other mapping method
}

以我看到的形式,错误发生在这一行:${my_table.myname}

在这里,您在上下文之外调用属性名称

${my_table.myname}

出现错误,因为my_table是my_table实例的列表,并且没有名为name的属性

解决此问题的方法可以是:

<select name="name">
    <g:each in="${my_table}" var="table">
        <option value="${table.name}">${table.name}</option>
    </g:each>
</select>

还要记住,标签标签在select中无效,因为您可以读取零个或多个或多个元素的允许内容。在

中,调用域对象表是个好主意吗?表是ANSI SQL中的保留字。你确定你的表是在Postgres中创建的吗?你能提供完整的stacktrace吗?我给出了name表作为我真实代码的示例。抱歉,误解请提供完整的堆栈跟踪。你的例子有误导性。这是完全的结构。使用此代码后,我收到500个内部服务器错误消息,消息是在null对象上无法获取属性“myname”,我想知道为什么这个问题会令人困惑,至少有几个原因。一个问题是,看起来my_table是my_table的实例列表,但在GSP中,您引用${my_table.myname},就好像my_table是一个特定实例一样。这是故意的还是您试图利用Groovy对集合的特殊属性访问从列表中的所有实例检索myname?这并不能解释为什么我的_表是空的,但清除它可能有助于进一步澄清。谢谢您的回答,但我的表名不是“table”,我给出了这个代码示例。对不起,误会了