Search code examples
grailstransientscaffold

Display a domain transient property in scaffolded views


In my Grails 1.3.7 project I have a domain class like this:

class User {

String login
String password
String name
String passwordConfirmation

static constraints = {
    login       unique:true, blank:false, maxSize:45
    password    password:true, blank:false, size:8..45, 
                matches: /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*/
    name        blank:false, maxSize:45
    passwordConfirmation display:true, password:true, validator: { val, obj ->
        if (!obj.properties['password'].equals(val)) {
            return ['password.mismatch']
        }}
}

static transients = ['passwordConfirmation']

String toString() {
    name
}

}

And I'm using scaffold for the corresponding create/edit actions.

My problem is that even if I marked passwordConfirmation constraint to be displayed, it isn't shown at the scaffold views. Is there something that I'm missing to make transient properties to be displayed? Is it possible?

Thanks


Solution

  • By default grails doesn't create the fields in views for transient properties. You could manually add them on each view or if you have a lot of them and are using the scaffolded views you could do the following:

    Install the view templates:

    grails InstallTemplates
    

    Then open the relevant templates in src/templates/scaffolding

    and modify the line that reads:

    persistentPropNames = domainClass.persistentProperties*.name
    

    to

    persistentPropNames = domainClass.properties*.name
    

    for each of the templates. This is a bit of a bodge, but it should work and you can further edit the template to include/exclude any properties you like.