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

时间:2017-10-16 12:53:05

标签: grails gorm

我使用的是Grails版本2.4.4和postgresql。当我运行app时,我看到错误消息Cannot get property 'myname' on null object。我知道该表不是空的并且数据库连接正确,因为我可以使用scaffolding上传和查看数据。

域类代码:

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

2 个答案:

答案 0 :(得分:1)

在我看到错误发生在此行的格式中:<label>${my_table.myname} </label><br/>

您在此处调用超出上下文的属性名称

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

您收到错误,因为my_tableMy_table个实例的列表,并且没有名为name的属性。

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

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

还要记住标签标签在选择内部无效,因为您可以在https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select <中读取允许的内容零个或多个<option><optgroup>元素。 / p>

答案 1 :(得分:0)

表是大多数数据库中的保留字。更改类和属性的名称或将它们映射到未保留的其他内容:

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
}