Ordenação de campos na View usando o scaffold
01/02/2015 19:17
0
Olá pessoal,

Estou estudando Grails e me deparei com um problema, espero que alguém possa me ajudar.

Não estou conseguindo ordenar os campos na ordem que quero em uma view, eles sempre são ordenados por ordem alfabética.

Tentei ordenar no constrants, mas ele não respeita.

Estou usando o Grails 2.4.4.


static constraints = {
numero blank: false
descricao blank: false, nullable: true
banco blank: false
}


Fazendo algumas pesquisas eu encontrei esse link, mesmo sendo para uma versão anterior resolvi testar, mas não funcionou.
Tags: Scaffold;


0
Você por criar o método index no seu Controller e passar os parâmetros para ordenação no seu método list vide:
Supondo que sua classe de domain se chame Conta

def index() {
def contaInstanceList = Conta.list([sort: 'numero', order: 'asc'])
[contaInstanceList: contaInstanceList]
}
02/02/2015 09:56


0
Vlw pela resposta Weibe, mas meu problema não é os dados e sim no momento que as views são geradas.

Tanto nas tabelas quanto na view de cadastro e edição, os campos estão sendo mostrados em ordem alfabética ao invés de respeitar a ordem que eu defini no constraints.

No constraints que passei, ele deveria exibir pelo que eu entendo:

Numero*: _____________
Descricao: _____________
Banco*: _____________

Mas está aparecendo assim:

Banco*: _____________
Descricao: _____________
Numero*: _____________
02/02/2015 14:19


0
- Roda ai no seu projeto o comando: install-templates
- Depois vá na pasta src/templates/scaffolding e editar o arquivo _form.gsp,
cola esse código no seu arquivo _form.gsp
obs: faça uma cópia do seu arquivo _form.gsp

<%=packageName%>
<% import grails.persistence.Event %>
<% import org.codehaus.groovy.grails.scaffolding.DomainClassPropertyComparator %>

<% excludedProps = Event.allEvents.toList() << 'version' << 'dateCreated' << 'lastUpdated'
persistentPropNames = domainClass.persistentProperties*.name
boolean hasHibernate = pluginManager?.hasGrailsPlugin('hibernate') || pluginManager?.hasGrailsPlugin('hibernate4')
if (hasHibernate) {
def GrailsDomainBinder = getClass().classLoader.loadClass('org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainBinder')
if (GrailsDomainBinder.newInstance().getMapping(domainClass)?.identity?.generator == 'assigned') {
persistentPropNames << domainClass.identifier.name
}
}

DomainClassPropertyComparator mattsComparator = new DomainClassPropertyComparator(domainClass)
comparator = mattsComparator

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)
for (p in props) {
if (p.embedded) {
def embeddedPropNames = p.component.persistentProperties*.name
def embeddedProps = p.component.properties.findAll { embeddedPropNames.contains(it.name) && !excludedProps.contains(it.name) }
Collections.sort(props, comparator)
%><fieldset class="embedded"><legend><g:message code="${domainClass.propertyName}.${p.name}.label" default="${p.naturalName}" /></legend><%
for (ep in p.component.properties) {
renderFieldForProperty(ep, p.component, "${p.name}.")
}
%></fieldset><%
} else {
renderFieldForProperty(p, domainClass)
}
}

private renderFieldForProperty(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 : false)
}
%>
<div class="fieldcontain \${hasErrors(bean: ${propertyName}, field: '${prefix}${p.name}', 'error')} ${required ? 'required' : ''}">
<label for="${prefix}${p.name}">
<g:message code="${domainClass.propertyName}.${prefix}${p.name}.label" default="${p.naturalName}" />
<% if (required) { %><span class="required-indicator">*</span><% } %>
</label>
${renderEditor(p)}
</div>
<% } %>
02/02/2015 16:50


0
Muito obrigado Weibe,

Esse seu código é bem parecido com o que eu havia pego no stacktrace.

Mas o meu não havia funcionado por alguma coisa que fiz errado.
02/02/2015 18:03



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto