我使用的是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/>
答案 0 :(得分:1)
在我看到错误发生在此行的格式中:<label>${my_table.myname} </label><br/>
。
您在此处调用超出上下文的属性名称
<g:select name="name" from="${my_table}"/><br/>
<label>${my_table.myname} </label><br/>
您收到错误,因为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>
还要记住标签标签在选择内部无效,因为您可以在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
}