2014-02-16 112 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

相關問題