我正在尝试运行示例 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>
但是我在登录页面中得到的是一个没有填充值的下拉列表:这是登录页面的屏幕截图:
万一我改变
from="${User?.list()}"
至
from="${User.list()}"
我得到一个 NullPointerException。所以有什么线索吗?