Como utilizar 2 beans na mesa view???
14/09/2008 00:00
0
Olá amigos,

Estou com uma grande dúvida a respeito da utilização de 2 beans na mesma view/controller.
Preciso criar um cadastro de associados. Este cadastro além dos campos como nome, endereço, etc., necessita também da data de filiação e a data de desfiliação do associado. Como é possível um mesmo associado se filiar e desfiliar várias vezes, tive que criar uma outra classe (dataFiliacao) relacionando com associado (1:n).
Sendo assim, na tela de cadastro de um novo associado, necessita colocar o campo de data de filiação, da classe dataFiliacao. A parte de inserção tudo beleza, o problema veio na validação do campo dataFiliacao na view create de associado.

Alguém saberia me dizer como utilizar 2 classes numa mesma view (inclusive validação dos campos do formulário)?

Segue código:


AssociadoController.groovy:

def create = {
def associado = new Associado()
associado.properties = params

def dataFiliacao = new DataFiliacao()
dataFiliacao.properties = params

return ['associado':associado, 'dataFiliacao':dataFiliacao]
}

def save = {
def associado = new Associado(params)
def dataFiliacao = new DataFiliacao(params)

dataFiliacao.dataInicio = new java.text.SimpleDateFormat("dd/MM/yyyy").parse(params.dataInicio)
dataFiliacao.associado = associado

if(!associado.hasErrors() && !dataFiliacao.hasErrors() && associado.save()) {

dataFiliacao.save()
flash.message = "Associado ${associado.id} criado com sucesso"
redirect(action:show,id:associado.id)
}
else {
render(view:'create',model:[associado:associado,dataFiliacao:dataFiliacao])
}
}


View create.gsp:

<html>
<head>
<meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;/>
<meta name=&quot;layout&quot; content=&quot;aplicacao&quot; />
<title>Associados</title>
</head>
<body onload=&quot;document.forms[0].elements[0].focus();&quot;>
<div id=&quot;menu&quot;>
<g&#58;render template=&quot;/layouts/menus/menu1&quot; />
</div>
<div class=&quot;body&quot;>
<h1>Novo Associado</h1>
<g&#58;if test=&quot;$&#123;flash.message&#125;&quot;>
<div class=&quot;message&quot;>$&#123;flash.message&#125;</div>
</g&#58;if>
<g&#58;hasErrors bean=&quot;$&#123;associado&#125;&quot;>
<div class=&quot;errors&quot;>
<g&#58;renderErrors bean=&quot;$&#123;associado&#125;&quot; as=&quot;list&quot; />
</div>
</g&#58;hasErrors>
<g&#58;form action=&quot;save&quot; method=&quot;post&quot; >
<div class=&quot;dialog&quot;>
<table>
<tbody>

<tr class=&quot;prop&quot;>
<td valign=&quot;top&quot; class=&quot;name&quot;>
<label for=&quot;nome&quot;>Nome&#58;</label>
</td>
<td valign=&quot;top&quot; class=&quot;value $&#123;hasErrors(bean&#58;associado,field&#58;'nome','errors')&#125;&quot;>
<input type=&quot;text&quot; id=&quot;nome&quot; name=&quot;nome&quot; value=&quot;$&#123;fieldValue(bean&#58;associado,field&#58;'nome')&#125;&quot; size=&quot;30&quot; maxlength=&quot;50&quot; />
</td>
</tr>

<tr class=&quot;prop&quot;>
<td valign=&quot;top&quot; class=&quot;name&quot;>
<label for=&quot;dataInicio&quot;>Data Filiação&#58;</label>
</td>
<td valign=&quot;top&quot; class=&quot;value $&#123;hasErrors(bean&#58;dataFiliacao,field&#58;'dataInicio','errors')&#125;&quot;>

<g&#58;datePicker name=&quot;dataInicio&quot; value=&quot;$&#123;dataFiliacao?.dataInicio&#125;&quot; ></g&#58;datePicker>
</td>
</tr>
.
*** Outros campos ***
.
</tbody>
</table>
</div>
<div class=&quot;buttons&quot;>
<span class=&quot;button&quot;><input class=&quot;save&quot; type=&quot;submit&quot; value=&quot;Salvar&quot; action=&quot;save&quot; /></span>
<span class=&quot;button&quot;><g&#58;actionSubmit class=&quot;cancel&quot; value=&quot;Cancelar&quot; action=&quot;list&quot; /></span>
</div>
</g&#58;form>
</div>
</body>
</html>


Obrigado!!!
Tags: Grails


0
Bom dia!

Qual foi exatamente o problema que aconteceu?
17/09/2008 00:00


0
Bom dia!

A parte de persistencia é feita corretamente. O problema está na validação dos campos na view. Os campos que não são &quot;originalmente&quot; do controller Associado não é validado.

vlw
17/09/2008 00:00


0
acho que nao deve estar validando as duas classes correto?

utiliza o validate() ao inves do hasErros no controller, e tira do mesmo if já que se der false no primeiro objeto não irá validar o segundo.

Off: Acha legal mesmo salvar os dois metodos sem transação?
coloca os saves pra um service e utiliza transação.
14/10/2008 00:00



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