diff --git a/src/templates/scaffolding/AsyncController.groovy b/src/templates/scaffolding/AsyncController.groovy index 8da30bf..8d59333 100644 --- a/src/templates/scaffolding/AsyncController.groovy +++ b/src/templates/scaffolding/AsyncController.groovy @@ -41,7 +41,7 @@ class ${className}Controller { ${propertyName}.save flush:true request.withFormat { - form { + form multipartForm { flash.message = message(code: 'default.created.message', args: [message(code: '${propertyName}.label', default: '${className}'), ${propertyName}.id]) redirect ${propertyName} } @@ -71,7 +71,7 @@ class ${className}Controller { } request.withFormat { - form { + form multipartForm { flash.message = message(code: 'default.updated.message', args: [message(code: '${className}.label', default: '${className}'), ${propertyName}.id]) redirect ${propertyName} } @@ -91,7 +91,7 @@ class ${className}Controller { ${propertyName}.delete flush:true request.withFormat { - form { + form multipartForm { flash.message = message(code: 'default.deleted.message', args: [message(code: '${className}.label', default: '${className}'), ${propertyName}.id]) redirect action:"index", method:"GET" } @@ -102,7 +102,7 @@ class ${className}Controller { protected void notFound() { request.withFormat { - form { + form multipartForm { flash.message = message(code: 'default.not.found.message', args: [message(code: '${propertyName}.label', default: '${className}'), params.id]) redirect action: "index", method: "GET" } diff --git a/src/templates/scaffolding/Controller.groovy b/src/templates/scaffolding/Controller.groovy index 5dbd2c7..dd369f3 100644 --- a/src/templates/scaffolding/Controller.groovy +++ b/src/templates/scaffolding/Controller.groovy @@ -44,7 +44,7 @@ class ${className}Controller { ${propertyName}.save flush:true request.withFormat { - form { + form multipartForm { flash.message = message(code: 'default.created.message', args: [message(code: '${propertyName}.label', default: '${className}'), ${propertyName}.id]) redirect ${propertyName} } @@ -71,7 +71,7 @@ class ${className}Controller { ${propertyName}.save flush:true request.withFormat { - form { + form multipartForm { flash.message = message(code: 'default.updated.message', args: [message(code: '${className}.label', default: '${className}'), ${propertyName}.id]) redirect ${propertyName} } @@ -90,7 +90,7 @@ class ${className}Controller { ${propertyName}.delete flush:true request.withFormat { - form { + form multipartForm { flash.message = message(code: 'default.deleted.message', args: [message(code: '${className}.label', default: '${className}'), ${propertyName}.id]) redirect action:"index", method:"GET" } @@ -100,7 +100,7 @@ class ${className}Controller { protected void notFound() { request.withFormat { - form { + form multipartForm { flash.message = message(code: 'default.not.found.message', args: [message(code: '${propertyName}.label', default: '${className}'), params.id]) redirect action: "index", method: "GET" } diff --git a/src/templates/scaffolding/_form.gsp b/src/templates/scaffolding/_form.gsp index 76076a5..1b3423c 100644 --- a/src/templates/scaffolding/_form.gsp +++ b/src/templates/scaffolding/_form.gsp @@ -12,6 +12,7 @@ } props = domainClass.properties.findAll { persistentPropNames.contains(it.name) && !excludedProps.contains(it.name) && (domainClass.constrainedProperties[it.name] ? domainClass.constrainedProperties[it.name].display : true) } Collections.sort(props, comparator.constructors[0].newInstance([domainClass] as Object[])) + boolean firstProperty = true for (p in props) { if (p.embedded) { def embeddedPropNames = p.component.persistentProperties*.name @@ -23,20 +24,23 @@ } %><% } else { - renderFieldForProperty(p, domainClass) + renderFieldForProperty(firstProperty, p, domainClass) + if (firstProperty) { + firstProperty = false + } } } -private renderFieldForProperty(p, owningClass, prefix = "") { +private renderFieldForProperty(firstProperty, p, owningClass, prefix = "") { boolean hasHibernate = pluginManager?.hasGrailsPlugin('hibernate') || pluginManager?.hasGrailsPlugin('hibernate4') boolean required = false if (hasHibernate) { cp = owningClass.constrainedProperties[p.name] required = (cp ? !(cp.propertyType in [boolean, Boolean]) && !cp.nullable && (cp.propertyType != String || !cp.blank) : false) } %> -
- -
+
+ +
${renderEditor(p)} \${hasErrors(bean: ${propertyName}, field: '${p.name}', 'error')}
diff --git a/src/templates/scaffolding/renderEditor.template b/src/templates/scaffolding/renderEditor.template index cc52aca..fe95f35 100644 --- a/src/templates/scaffolding/renderEditor.template +++ b/src/templates/scaffolding/renderEditor.template @@ -92,7 +92,7 @@ private renderManyToOne(domainClass,property) { if (property.association) { def sb = new StringBuilder() - sb << '' sb as String @@ -117,14 +116,13 @@ if(cls != null) { def sb = new StringBuilder() - sb << '' sb as String