Skip to content
This repository was archived by the owner on Oct 31, 2018. It is now read-only.

Fix the wrong selection style #93

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/templates/scaffolding/AsyncController.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -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}
}
Expand Down Expand Up @@ -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}
}
Expand All @@ -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"
}
Expand All @@ -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"
}
Expand Down
8 changes: 4 additions & 4 deletions src/templates/scaffolding/Controller.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -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}
}
Expand All @@ -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}
}
Expand All @@ -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"
}
Expand All @@ -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"
}
Expand Down
14 changes: 9 additions & 5 deletions src/templates/scaffolding/_form.gsp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -23,20 +24,23 @@
}
%></fieldset><%
} 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)
} %>
<div class="\${hasErrors(bean: ${propertyName}, field: '${prefix}${p.name}', 'error')} ${required ? 'required' : ''}">
<label for="${prefix}${p.name}" class="control-label"><g:message code="${domainClass.propertyName}.${prefix}${p.name}.label" default="${p.naturalName}" /><% if (required) { %><span class="required-indicator">*</span><% } %></label>
<div>
<div class="\${hasErrors(bean: ${propertyName}, field: '${prefix}${p.name}', 'error')} ${required ? 'required' : ''} form-group ${firstProperty ? 'margin-top-medium' : ''}">
<label for="${prefix}${p.name}" class="col-sm-2 control-label"><g:message code="${domainClass.propertyName}.${prefix}${p.name}.label" default="${p.naturalName}" /><% if (required) { %><span class="required-indicator">*</span><% } %></label>
<div class="col-sm-10">
${renderEditor(p)}
<span class="help-inline">\${hasErrors(bean: ${propertyName}, field: '${p.name}', 'error')}</span>
</div>
Expand Down
6 changes: 2 additions & 4 deletions src/templates/scaffolding/renderEditor.template
Original file line number Diff line number Diff line change
Expand Up @@ -92,15 +92,14 @@
private renderManyToOne(domainClass,property) {
if (property.association) {
def sb = new StringBuilder()
sb << '<g:select class="form-control"'
sb << '<g:select class="form-control many-to-one"'
// id is "x" and name is "x.id" as the label will have for="x" and "." in an id will confuse CSS
sb << ' id="' << property.name << '"'
sb << ' name="' << property.name << '.id"'
sb << ' from="${' << property.type.name << '.list()}"'
sb << ' optionKey="id"'
if (isRequired()) sb << ' required=""'
sb << ' value="${' << "${domainInstance}?.${property.name}" << '?.id}"'
sb << ' class="many-to-one"'
sb << renderNoSelection(property)
sb << '/>'
sb as String
Expand All @@ -117,14 +116,13 @@

if(cls != null) {
def sb = new StringBuilder()
sb << '<g:select class="form-control" name="' << property.name << '"'
sb << '<g:select class="form-control many-to-many" name="' << property.name << '"'
sb << ' from="${' << cls.name << '.list()}"'
sb << ' multiple="multiple"'
sb << ' optionKey="id"'
sb << ' size="5"'
if (isRequired()) sb << ' required=""'
sb << ' value="${' << "${domainInstance}?.${property.name}" << '*.id}"'
sb << ' class="many-to-many"'
sb << '/>'
sb as String

Expand Down