A very small but I’m sure useful snippet here for anyone banging their head against a wall trying to figure out why they cannot validate command objects.. Or even why submitting a form they get this rather misleading exception message from Grails.

Method on class [com.tucanoo.SomeCommandObject] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.

This happens when you are using CommandObjects behind your forms, rather than binding directly to Domain objects. Don’t be tempted to avoid Command Objects, they are worth it and help keep your application more secure and maintainable.

I don’t know why a Grails IllegalStateException exception is thrown, but it happens when you are validating (maybe not even explicitly) a command object that is not explicitly marked as Validateable.

Simply mark your class with the annotation @Validateable and you should find the problem goes away.

It’s very easy to forget NOT to mark command objects @Validateable, perhaps they should be by default as certainly for me, I like to supply a whole bunch of constraints with my command objects and ensure they validate before I let the data contained within go near my domain layer.

With the extremely rapid rapid application development benefits provided by Grails,  It can be tempting to feel you have learned nearly everything you need to know by the time you’ve got your first web app up linked to a database with full CRUD facilities and error handling ready.  I’m sure you were as impressed with the speed of development as I was when I created my first Grails app.

At such a point it can be very tempting to just rush straight into your next project,  however you absolutely must continue your learning path and look over the excellent documentation  otherwise you be will missing out on some of the finer features provided by Grails and the Groovy language.

Learn more ...