Grails 看不到数据库 table 的内容

Grails can't see database table's content

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

域名class代码:

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

Table 是大多数数据库中的保留字。要么更改 class 和 属性 的名称,要么将它们映射到其他未保留的名称:

static mapping = {
   table 'my_table'
}

将名为 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
}

在表格中,我看到错误发生在这一行:<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>

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