我正在使用Grails。我想从一个名为“User”的类中的数据库中提取信息,然后只显示它。数据存储在MySql数据库中。我可以连接到它,我的应用程序也可以。
具有业务逻辑的控制器“UserController”具有一个名为“User”的动作。它看起来像这样:
import gorm.*
class UserController {
static scaffold = true
static defaultAction = "user"
def index() {
...
}
def user() {
try {
def userToDisplay = User.get(1)
return userToDisplay
}
catch (Exception e) {
log.error("Something went wrong! ", e.message)
}
}
}
在我看来,GetUser应该只是获取id为1的用户(数据库中存在该用户)。该用户的内容应显示在视图中,也称为“用户”。它看起来像这样:
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main"/>
<title>User info</title>
</head>
<body>
Last Name: ${User.lastName}<br/>
First Name: ${User.firstName}<br/>
E-mail: ${User.email}<br/><br/>
</body>
</html>
我不断收到一条错误消息,内容如下:
| Error 2014-01-27 13:04:07,089 [http-bio-8080-exec-10] ERROR
errors.GrailsExceptionResolver - NullPointerException occurred when processing request:
[GET] /TaskCheck/user
Cannot get property 'lastName' on null object. Stacktrace follows:
Message: Error processing GroovyPageView: Cannot get property 'lastName' on null object
换句话说,它一直认为应从数据库中提取的“用户”对象始终为空。我想不出任何错过的代码。
你能告诉我我错过了什么吗?我是否错过了UserController中的一些代码?这应该花费整整五分钟的时间,但这比我花了很长时间。感谢。答案 0 :(得分:1)
正如评论中所指出的,您没有将模型返回到您的视图中。尝试这样的事情(并看一下用户指南)。
def user() {
def model = [:]
try {
model['user'] = User.get(1)
}
catch (Exception e) {
log.error("Something went wrong! ", e.message)
}
render view: 'user', model: model
}
然后在您的视图中,您可以像这样访问您的模型:
${user.lastName}
答案 1 :(得分:0)
谢谢你,dmahapatro&amp;约书亚摩尔。
使用“渲染”,使用视图和模型将模型返回到视图。你们两个都是对的。我的回答是:
class UserController
{
static defaultAction = "user"
...
def user()
{
try
{
def userToDisplay = User.get(1)
render view: "user", model: [User:userToDisplay]
}
catch(Exception e)
{
log.error("Something went wrong! ", e.message)
}
}
}
我一直试图用return语句来做,就像我在所有其他语言中使用一样。
我需要更加努力地摆脱我的.Net习惯。