1

我正在尝试运行示例 Collab-Todo 应用程序,如《开始 Groovy 和 Grails》第 123 页(作者:Christopher M. Judd、Joseph Faisal Nusairat 和 James Shingler 出版:Apress and Edition:2008)中的示例。这是我的 User.groovy 文件:

package collab.todo

class User {

    String userName
    String firstName
    String lastName
    static hasMany = [todos: Todo, categories: Category]
    static constraints = {
        userName(blank:false,unique:true)
        firstName(blank:false)
        lastName(blank:false)
    }
    String toString () {
        "$lastName, $firstName"
    }
}

UserController.groovy 如下:

package collab.todo

class UserController {

    def scaffold = User
    def login = {

    }
    def handleLogin = {
        def user = User.findByUserName(params.userName)
        if (!user) {
            flash.message = "User not found for userName: ${params.userName}"
            redirect(action:'login')
        }
        session.user = user
        redirect(controller:'todo')
    }
    def logout = {
        if(session.user) {
            session.user = null
            redirect(action:'login')
        }
    }
}

我可以像往常一样创建、读取、更新或删除用户表。这是我的用户视图的示例屏幕截图: 用户列表 在脚手架视图中,我试图在下拉列表中显示所有用户的列表(如每本书)在 user/login.gsp 中使用以下代码段:

<g:select name='userName' from="${User?.list()}"
               optionKey="userName" optionValue="userName"></g:select>

但是我在登录页面中得到的是一个没有填充值的下拉列表:这是登录页面的屏幕截图: user/login.gsp 视图

万一我改变

from="${User?.list()}"

from="${User.list()}"

我得到一个 NullPointerException。所以有什么线索吗?

4

1 回答 1

3

从您的视图中似乎User找不到该课程。

尝试以下方法之一:

将导入语句添加到您的视图中。

<%@ page import="collab.todo.User" %>

from或者在属性中使用完全限定名称。

from="${collab.todo.User.list()}"

最佳做法是从控制器传递用户列表:

def login = {
    [users: User.list()]
}

并在您的视图中使用该集合

from="${users}"
于 2013-04-29T12:40:00.720 回答