Search code examples
grailsgrails-domain-classgrails-controller

Not able to login to Grails app


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>

Solution

  • 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}" ... />