2013-04-29 68 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}"