susi
susi

Reputation: 493

populating own error-messages to the grails domain errors

I'd like to know, if (and how) I could append some own error-messages to the domain-object after (or before) a validation.

My intention is, I have to check the uploaded file in a form for some attributes (image size etc.) and if something is wrong, I would like to add an error-message which is displayed in the usual grails ".hasErrors" loop.

(And I think I need to have the possibility to express errors in some cross-domain check failure...)

Thanks in advance, Susanne.

Upvotes: 4

Views: 1208

Answers (2)

IgniteCoders
IgniteCoders

Reputation: 4990

Here is a real example with a custom domain error:

def signup(User user) {
    try {
        //Check for some condition
        if (!params.password.equals(params.passwordRepeat)) {
            //Reject the value if condition is not fulfilled
            user.errors.rejectValue(
                    'password',
                    'user.password.notEquals',
                    'Default message'
            )
            //Throw an exception to break action and rollback if you are in a service
            throw new ValidationException('Default message', user.errors)
        }
        //Continue with your logic and save if everything is ok
        userService.signup(user)
    } catch (ValidationException e) {
        //Render erros in the view
        respond user.errors, view:'/signup'
        return
    }
}

Upvotes: 0

Mario David
Mario David

Reputation: 1615

You can add custom validation errors as described in the errors docs as follows:

class SampleController {

def save() {
  def sampleObject = new SampleObject(params)
  sampleObject.validate()

  if(imageSizeIsTooBig(sampleObject)) {
    sampleObject.errors.rejectValue(
      'uploadedFile',
      'sampleObject.uploadedFile.sizeTooBig'
    )    
}

private def imageSizeIsTooBig(SampleObject sampleObject) {
  // calculation on sampleObject, if size is too big
}

Perhaps, you could even handle your case with a custom validator, so you can call validate() one time and be sure, that all constraints are fulfilled.

Upvotes: 4

Related Questions