2017-10-16 78 views
1

我正在使用Grails版本2.4.4和postgresql。当我运行应用程序时,我看到错误消息Cannot get property 'myname' on null object。我知道表格不是空的,而且数据库连接正确,因为我可以使用脚手架上传和查看数据。Grails无法看到数据库表格的内容

域类代码:

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/> 
+0

调用域对象'Table'是个好主意吗?表是ANSI SQL中的保留字。你确定你的表甚至是在Postgres中创建的吗?你能提供完整的堆栈跟踪吗? – saw303

+0

我给名称表作为我的真实代码的一个例子。对不起,误解了 –

+0

请提供完整的堆栈跟踪。你的例子有误导性。 – saw303

回答

1

在我看到错误发生在这一行的形式:<label>${my_table.myname} </label><br/>

在这里,您所呼叫的属性名称断章取义

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

的你会得到一个错误,因为my_tableMy_table实例的列表,并没有一个属性命名的名称。

来解决这个问题可能是一个办法:

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

还记得标签标记无效里面选择,因为你可以阅读许可内容零个或多个<option><optgroup>元素。 in https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select

0

表是大多数数据库的保留字。因为在静态映射块

static mapping = { 
    table 'my_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 
} 
+0

谢谢你的回答,但我的表名不是'表',我把这个作为我的代码的例子。对不起,误会了 –