2013-04-29 85 views
1

我想运行示例Collab-Todo应用程序,如书中开始Groovy和Grails,页面号123(作者:克里斯托弗M.贾德,约瑟夫费萨尔Nusairat ,James Shingler Publication:Apress and Edition:2008)。这里是我的User.groovy文件:无法填充选择选项标签使用g:在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') 
     } 
    } 
} 

我能够创建,读取,更新或删除用户表作为usual.Here是我的用户视图的示例屏幕截图: 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。因此,任何线索发生了什么?

回答

3

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

请尝试以下操作之一:

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

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

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

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

最好的做法是从控制器通过用户的列表:

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

而且您的视图中使用集合

from="${users}"