2014-02-16 110 views
1

我是Grails的新手。无法登录到Grails应用程序

我试图通过阅读“从新手到professsional开始groovy和grails”一书来创建名为collab-todo的web应用程序。 我使用动态脚手架特点为,

class UserController { 
    def scaffold = User 
    def login = {} 
} 

在_topbar.gsp

<a href="/collab-todo/user/login">Login</a> 

当我点击上面的链接登录其是否有在_topbar.gsp我收到错误,如,

java.lang.NullPointerException 
Message: 
Cannot invoke method list() on null object 

我loging.gsp身体,

<body> 
<div class="body"> 
<g:if test="${flash.message}"> 
<div class="message"> 
${flash.message} 
</div> 
</g:if> 
<p> 
Welcome to Your ToDo List. Login below 
</p> 
<form action="handleLogin"> 

<span class='nameClear'><label for="login"> 
Sign In: 
</label> 
</span> 
<g:select name='userName' from="${User.list()}" 
optionKey="userName" optionValue="userName"></g:select> 
<br /> 
<div class="buttons"> 
<span class="button"><g:actionSubmit value="Login" /> 
</span> 
</div> 
</form> 
</div> 
</body> 
+0

看起来像'用户== null' – donfuxx

+1

为什么是空的,我已经创建了2个用户。如果框架自动读取User Model的值.User.list()应该包含一些2的值对吗? – kumar

回答

2

在您的GSP页面 - 渲染器不知道什么是User。你有3种选择:

1)用户完整的类名(含包装):

即:

<g:select name='userName' from="${com.collabtodo.package.User.list()}" ... /> 

2)导入它:

<%@ page import="com.collabtodo.package.User"%> 
... 
<g:select name='userName' from="${User.list()}" ... /> 

3)有它在您的型号中:

import com.collabtodo.package.User 
class TheController { 
    def index() { 
     [users: User.list()] 
    } 
} 

在GSP:

<g:select name='userName' from="${users}" ... /> 
+2

选项3应该首先列出,因为它是从视图执行数据库调用的_crazy_。这也使得限制返回结果的数量变得更加容易,因为你可能不想拉入一百万个用户实例。 –

+0

感谢Xeon的工作 – kumar

相关问题