Thursday, September 24, 2009

More N00b Grails Errors - When a Domain Class Isn't a Domain Class

I figure as I make my travails with Grails I'll post stuff I run into so
others can benefit if/when they jump into Grails.

Today I started a new Grails application and created a domain class and a
controller for User. These were in packages but that's irrelevant, so I'll
keep things simple for the purposes of the example.


grails create-domain-class User
grails create-controller User

I then edited my User class:

class User {

String email
String password
String firstName
String lastName

static constraints = {
email(email:true,unique:true)
password(blank:false)
firstName(blank:false)
lastName(blank:false)
}

}

And edited my controller to add the scaffolding:

class UserController {

def scaffold = true

def index = {}
}

When I fired up the app I got an error to the effect of "Can't scaffold
because User isn't a domain class." Weird. Since I hadn't spent much time
on anything yet, I nuked my domain class, controller, and test files and
started again.

This time around the app ran but I got a 404 error when clicking on the
UserController link on the index page:

/WEB-INF/grails-app/views/user/index.jsp

RequestURI=/myapp/WEB-INF/grails-app/views/user/index.jsp

Very odd it's looking for JSP, but it dawned on my that I told it to
scaffold AND I had an empty index action defined, so remove the index
action and voila, all is right with the world.

If you got this far and are thinking "DUH!", remember that I warned you
with the "N00b" declaration in the title. ;-) I'm sure other people are in
the same boat I am, namely augmenting skills they have in other languages
and technologies with Grails, so even if it's a no-brainer for those more
familiar with Grails I figure I'll share anyway. Expect my Grails posts to
get more interesting the more I dig into Grails.

4 comments:

Joe Roberts said...

Spring Security plugin: http://grails.org/plugin/acegi

Joe Roberts said...

Not completely related, but the Spring Security plugin gives you a full user/authentication framework; can be a big time saver!

Matthew Woodward said...

Thanks--definitely on my list of stuff to check out.

Matthew Woodward said...

Think maybe I nailed down what the "not a domain class" problem is, at least on a Mac. If you're running the grails app when you first create your domain class and controller, that seems to throw the "not a domain class" error. If you create these without the app running then that error isn't thrown.