I am new to Grails.
I am trying to create web application called collab-todo by going through the book 'Begining groovy and grails from Novice to professsional'. I am using dynamic scaffolding feature as,
class UserController {
def scaffold = User
def login = {}
}
In _topbar.gsp
<a href="/collab-todo/user/login">Login</a>
when I click the above Login link which is there in _topbar.gsp I am getting error like,
java.lang.NullPointerException
Message:
Cannot invoke method list() on null object
my loging.gsp body,
<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>
In your GSP page - renderer doesn't know what is User
. You have 3 options:
1) User full class name (with package):
That is:
<g:select name='userName' from="${com.collabtodo.package.User.list()}" ... />
2) Import it:
<%@ page import="com.collabtodo.package.User"%>
...
<g:select name='userName' from="${User.list()}" ... />
3) Have it in your model:
import com.collabtodo.package.User
class TheController {
def index() {
[users: User.list()]
}
}
in GSP:
<g:select name='userName' from="${users}" ... />