Grails - 拉数据并显示它?

时间:2014-01-27 18:48:51

标签: mysql grails

我正在使用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中的一些代码?这应该花费整整五分钟的时间,但这比我花了很长时间。感谢。

2 个答案:

答案 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习惯。