Grails 无法在Groovy中使用g:select填充select选项标记

Grails 无法在Groovy中使用g:select填充select选项标记,grails,gsp,Grails,Gsp,我正在尝试运行示例Collab Todo应用程序,如《Groovy和Grails入门》一书第123页所述(作者:Christopher M.Judd、Joseph Faisal Nusairat和James Shingler Publication:Apress and Edition:2008)。这是我的User.groovy文件: package collab.todo class User { String userName String firstName S

我正在尝试运行示例Collab Todo应用程序,如《Groovy和Grails入门》一书第123页所述(作者:Christopher M.Judd、Joseph Faisal Nusairat和James Shingler Publication: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')
        }
    }
}
我可以像往常一样创建、读取、更新或删除用户表。以下是我的用户视图的示例屏幕截图: 在scaffolding视图中,我试图使用user/login.gsp中的以下代码片段在下拉列表中显示所有用户的列表(如本书所示):

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


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

从您的视图中似乎找不到
用户

<%@ page import="collab.todo.User" %>
请尝试以下操作之一:

将导入语句添加到视图中

<%@ page import="collab.todo.User" %>
最佳做法是从控制器传递用户列表:

def login = {
    [users: User.list()]
}
并在视图中使用集合

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