Inserir objetos aninhados.
08/01/2015 12:13
0
Olá amigos do grails brasil, estou com uma dificuldade no método save do grails,
Tenho os domínios Pessoa, EnderecoPessoa, DocumentoPessoa, e também um controle chamado Regularização, onde este é responsável por receber os objetos preenchidos pelo Formulário.

segue os domínios.
class Pessoa {
static hasMany = [enderecos: EnderecoPessoa]
DocumentoPessoa documento
// Demais atributos.

}

class EnderecoPessoa {
static belongsTo = [pessoas:Pessoa]
// Demais atributos
}

class DocumentoPessoa {
atributos da classe
}

No controle Regularização tenho

def save(Pessoa pessoaInstance, DocumentoPessoa documentoPessoaInstance, EnderecoPessoa enderecoPessoaInstance) {

if(pessoaInstance.hasErrors()){
respond pessoaInstance.errors, view:'create'
print pessoaInstance.errors
return
}

if (enderecoPessoaInstance.hasErrors()) {
respond enderecoPessoaInstance.errors, view:'create'
print enderecoPessoaInstance.errors
return
}


documentoPessoaInstance.save()
pessoaInstance.addToEnderecos(enderecoPessoaInstance)
pessoaInstance.setDocumento(documentoPessoaInstance)
pessoaInstance.save flush: true



request.withFormat {
form {
flash.message = message(code: 'default.updated.message', args: [message(code: 'Regularizacao.label', default: 'Regularizacao'), pessoaInstance.id])
redirect pessoaInstance
}
'*'{ respond pessoaInstance, [status: OK] }
}


}


A dificuldade neste esquema, é que eu consigo inserir a pessoa juntamente com seu endereço, mas não consigo setar o documento.

Alguma luz? Valew galera.
Tags: Grails, GORM


0
Olá Yure,
Já tentou no lugar de
pessoaInstance.setDocumento(documentoPessoaInstance)
colocar
pessoaInstance.documento = documentoPessoaInstance

Algumas observações:
Você está criando estes 3 objetos (pessoa, documento e endereço) em uma mesma interface?
Usou scaffolding para gerar suas views e controllers?
Conhece o embedded?
08/01/2015 13:55


0
Esses objetos estão sendo criados atravez do springm onde eu seto no componente da view o objeto correspondente, por exemplo.

Observação 1.

<div class="${hasErrors(bean: documentoPessoaInstance, field: 'cpf', 'error')} required">
<label for="cpf" class="control-label"><g:message code="cpf.label" default="CPF"/></label>
<g:textField class="form-control" name="cpf" maxlength="100" data-mask="999.999.999-99" autocomplete="off" value="${documentoPessoaInstance?.cpf}"/>
</div>

<div class="${hasErrors(bean: pessoaInstance, field: 'nome', 'error')} required">
<label for="nome" class="control-label"><g:message code="nome.label" default="Nome da Pessoa"/></label>
<g:textField class="form-control" name="nome" maxlength="100" onkeyup="toUpperCase()" autocomplete="off" value="${pessoaInstance?.nome}"/>
</div>

Observação 2.

Não estou usando scaffolding.

Observação 3.

Conheço sim o embedded mas acredito que seja possível fazer isso de uma forma mais simples, sem que os objetos sejam criados de uma só vez, ou que o outro seja sempre dependente.
Existirá momentos que eu cadastrarei pessoa mais não documento ou endereço.
08/01/2015 15:51



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