Fomulário Dinamico
05/06/2013 01:39
0
Olá pessoal, estou seguindo o tutorial do http://omarello.com/2010/08/grails-one-to-many-dynamic-forms/

Estou seguindo o exemplo, mas na hora de salvar está dando, as views são exibidas normalmente.

O campo [number] da classe [class evento.Phone] não pode ser vazia
O campo [type] da classe [class evento.Phone] não pode ser vazia
O campo [number] da classe [class evento.Phone] não pode ser vazia
O campo [type] da classe [class evento.Phone] não pode ser vazia
O campo [number] da classe [class evento.Phone] não pode ser vazia
O campo [type] da classe [class evento.Phone] não pode ser vazia


SEGUE O CONTROLADOR.




import org.springframework.dao.DataIntegrityViolationException

class ContactController {

static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

def index() {
redirect(action: "list", params: params)
}

def list(Integer max) {
params.max = Math.min(max ?: 10, 100)
[contactInstanceList: Contact.list(params), contactInstanceTotal: Contact.count()]
}

def create() {
[contactInstance: new Contact(params)]
}

def save() {
def contactInstance = new Contact(params)
def _toBeRemoved = contactInstance.phones.findAll {!it}

// if there are phones to be removed
if (_toBeRemoved) {
contactInstance.phones.removeAll(_toBeRemoved)
}

//update my indexes
contactInstance.phones.eachWithIndex(){phn, i ->
if(phn)
phn.index = i
}
if (!contactInstance.save(flush: true)) {
render(view: "create", model: [contactInstance: contactInstance])
return
}

flash.message = message(code: 'default.created.message', args: [message(code: 'contact.label', default: 'Contact'), contactInstance.id])
redirect(action: "show", id: contactInstance.id)
}

def show(Long id) {
def contactInstance = Contact.get(id)
if (!contactInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'contact.label', default: 'Contact'), id])
redirect(action: "list")
return
}

[contactInstance: contactInstance]
}

def edit(Long id) {
def contactInstance = Contact.get(id)
if (!contactInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'contact.label', default: 'Contact'), id])
redirect(action: "list")
return
}

[contactInstance: contactInstance]
}

def update(Long id, Long version) {
def contactInstance = Contact.get(id)
if (!contactInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'contact.label', default: 'Contact'), id])
redirect(action: "list")
return
}

if (version != null) {
if (contactInstance.version > version) {
contactInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
[message(code: 'contact.label', default: 'Contact')] as Object[],
"Another user has updated this Contact while you were editing")
render(view: "edit", model: [contactInstance: contactInstance])
return
}
}

contactInstance.properties = params
// find the phones that are marked for deletion
def _toBeDeleted = contactInstance.phones.findAll {it?.deleted || !it}

// if there are phones to be deleted remove them all
if (_toBeDeleted) {
contactInstance.phones.removeAll(_toBeDeleted)
}

//update my indexes
contactInstance.phones.eachWithIndex(){phn, i ->
if(phn)
phn.index = i
}

if (!contactInstance.save(flush: true)) {
render(view: "edit", model: [contactInstance: contactInstance])
return
}

flash.message = message(code: 'default.updated.message', args: [message(code: 'contact.label', default: 'Contact'), contactInstance.id])
redirect(action: "show", id: contactInstance.id)
}

def delete(Long id) {
def contactInstance = Contact.get(id)
if (!contactInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'contact.label', default: 'Contact'), id])
redirect(action: "list")
return
}

try {
contactInstance.delete(flush: true)
flash.message = message(code: 'default.deleted.message', args: [message(code: 'contact.label', default: 'Contact'), id])
redirect(action: "list")
}
catch (DataIntegrityViolationException e) {
flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'contact.label', default: 'Contact'), id])
redirect(action: "show", id: id)
}
}
}


Minha versão do Grails é a 2.2.1
Tags: one to many, fomulario dinamico


0
Você está tentando salvar estes campos em branco.
O campo [number] da classe [class evento.Phone] não pode ser vazia
O campo [type] da classe [class evento.Phone] não pode ser vazia
O campo [number] da classe [class evento.Phone] não pode ser vazia
O campo [type] da classe [class evento.Phone] não pode ser vazia
O campo [number] da classe [class evento.Phone] não pode ser vazia
O campo [type] da classe [class evento.Phone] não pode ser vazia

Provavelmente você adicionou 3 linhas deste item, e salvou em branco.
Ou os nomes na view estão erradas.
05/06/2013 21:11


0
Na questão de salvar em branco não pode ser isso, verifiquei as view e estão com os nomes corretos como o tutorial explica, não pode ser tbm o nome da view pois a view create redenriza a view de cadastro do tutorial.

Ta peso fazer essa parada de formulario dinamico.
06/06/2013 03:03


0
Conseguiu resolver? Tenho o mesmo problema aqui.
14/07/2013 15:51


0
Consegui sim cara, a noite te mando lá para as 23hs, mas não foi esse exemplo ai não.
Até mais o/
14/07/2013 19:16



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