Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 753
Carlos Avatar asked May 18 '11 13:05

Carlos


1 Answers

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.

like image 140
lo_toad Avatar answered Sep 25 '22 15:09

lo_toad