无法使用g:在Groovy中选择填充select-option标记

时间:2013-04-29 12:15:11

标签: grails gsp

我正在尝试运行示例Collab-Todo应用程序,如书籍Beginning Groovy and 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表。这是我的用户视图的示例屏幕截图: The User List 在脚手架视图中,我试图使用user / login.gsp中的以下代码段显示下拉列表中的所有用户列表(根据本书):

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

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

如果我改变

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

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

我收到NullPointerException。那么有什么线索呢?

1 个答案:

答案 0 :(得分:3)

看起来无法从您的视图中找到User类。

请尝试以下方法之一:

将import语句添加到视图中。

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

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

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

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

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

在视图中使用该集合

from="${users}"