Problema com Constraints no Grails
09/06/2009 00:00
0
Amigos,

Estou usando o grails 1.0.4. Coloquei umas constraints na minha class Domain:

class Candidato
{
String nome
String email
String telefone
Date dateCreated
Date lastUpdated
Usuario usuarioCreated
Usuario usuarioUpdated

static constraints =
{
nome(nullable:false,blank:false, maxSize:100)
email(nullable:true,blank:true, maxSize:255, email:true, unique:true)
telefone(nullable:false,blank:false, maxSize:11)
usuarioCreated(nullable:false)
usuarioUpdated(nullable:false)
}

String toString()
{
"${this?.nome}"
}
}


Quando salvo ou faço update as restrições são verificadas e se houver erro, o mesmo é exibido na tela.
O problema é que preciso que o candidato atualize seus próprios dados e fiz um método separado no controller para fazer isso, uma vez que não desejo atualizar tds os dados, porém quando estou conseguindo salvar dados inválidos, ou seja, não está verificando as restrições que coloquei no meu Domain...alguém pode me ajudar nisso:


def atualizarDados =
{
def usuario = Usuario.get(session?.usuario?.id)
def candidatoInstance = Candidato.get( usuario?.candidato?.id )
if(!candidatoInstance) {
flash.message = "Candidato não existe!"
return [ candidatoInstance : candidatoInstance ]
}
else {
return [ candidatoInstance : candidatoInstance ]
}
}

def updateDados = {
def usuario = Usuario.get(session?.usuario?.id)
def candidatoInstance = Candidato.get( usuario?.candidato?.id )
if(candidatoInstance) {
candidatoInstance.email = params.email
println email
candidatoInstance.telefone = params.telefone
println telefone
candidatoInstance.usuarioUpdated = Usuario.get(session?.usuario?.id)
if(!candidatoInstance.hasErrors() && candidatoInstance.save(flush:true)) {
flash.message = "Operação realizada com sucesso!"
redirect(action:atualizarDados,id:candidatoInstance.id)
}
else {
render(view:'atualizarDados',model:[candidatoInstance:candidatoInstance])
}
}
else {
flash.message = "Candidato não existe!"
redirect(action:atualizarDados,id:params.id)
}
}


A view que criei está assim:


<html>
<head>
<meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;/>
<meta name=&quot;layout&quot; content=&quot;main&quot; />
<g&#58;javascript src=&quot;app/candidato.js&quot; />
</head>
<body>
<div class=&quot;body&quot; style=&quot;width&#58;550px&quot;>
<h1>Atualiza Dados Pessoais</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;candidatoInstance&#125;&quot;>
<div class=&quot;errors&quot;>
<g&#58;renderErrors bean=&quot;$&#123;candidatoInstance&#125;&quot; as=&quot;list&quot; />
</div>
</g&#58;hasErrors>
<g&#58;form method=&quot;post&quot;>
<div class=&quot;dialog&quot;>
<table>
<tbody>

<tr class=&quot;prop&quot;>
<td valign=&quot;top&quot; class=&quot;value $&#123;hasErrors(bean&#58;candidatoInstance,field&#58;'id','errors')&#125;&quot;>
Matrícula&#58; * </br>
<input style=&quot;width&#58;95%&quot; disabled=&quot;true&quot; type=&quot;text&quot; maxlength=&quot;100&quot; id=&quot;matricula&quot; name=&quot;matricula&quot; value=&quot;$&#123;fieldValue(bean&#58;candidatoInstance,field&#58;'id')&#125;&quot;/>
</td>
</tr>

<tr class=&quot;prop&quot;>
<td valign=&quot;top&quot; class=&quot;value $&#123;hasErrors(bean&#58;candidatoInstance,field&#58;'nome','errors')&#125;&quot;>
Nome&#58; * </br>
<input style=&quot;width&#58;95%&quot; disabled=&quot;true&quot; type=&quot;text&quot; maxlength=&quot;100&quot; id=&quot;nome&quot; name=&quot;nome&quot; value=&quot;$&#123;fieldValue(bean&#58;candidatoInstance,field&#58;'nome')&#125;&quot;/>
</td>
</tr>

<tr class=&quot;prop&quot;>
<td valign=&quot;top&quot; class=&quot;value $&#123;hasErrors(bean&#58;candidatoInstance,field&#58;'email','errors')&#125;&quot;>
E-mail&#58; </br>
<input style=&quot;width&#58;95%&quot; type=&quot;text&quot; maxlength=&quot;255&quot; id=&quot;email&quot; name=&quot;email&quot; value=&quot;$&#123;fieldValue(bean&#58;candidatoInstance,field&#58;'email')&#125;&quot;/>
</td>
</tr>

<tr class=&quot;prop&quot;>
<td valign=&quot;top&quot; class=&quot;value $&#123;hasErrors(bean&#58;candidatoInstance,field&#58;'telefone','errors')&#125;&quot;>
Telefone&#58; * </br>
<input style=&quot;width&#58;50%&quot; type=&quot;text&quot; maxlength=&quot;11&quot; id=&quot;telefone&quot; name=&quot;telefone&quot; value=&quot;$&#123;fieldValue(bean&#58;candidatoInstance,field&#58;'telefone')&#125;&quot;/>
</td>
</tr>

<tr class=&quot;prop&quot;>
<td>* Campos Obrigatórios </td>
</tr>

</tbody>
</table>
</div>
<div class=&quot;buttons&quot;>
<span class=&quot;button&quot;><g&#58;actionSubmit class=&quot;save&quot; controller=&quot;candidato&quot; action=&quot;updateDados&quot; value=&quot;Salvar&quot;/></span>
</div>
</g&#58;form>
</div>
</body>
</html>
Tags: Grails


0
qual é o dado invalido que nao esta deixando passar ?

Herrera
09/06/2009 00:00


0
O e-mail tá deixando inserir com valor inválido...e a senha permite inserir em branco, sendo q no processo de update e save essas restrições são verificadas, somente nesse método q criei não
09/06/2009 00:00


0
qual o valor de email que não está consistindo?, tente :


if(candidatoInstance.validate()) &#123;
// do something with user
&#125;
else &#123;
candidatoInstance.errors.allErrors.each &#123;
println it
&#125;
&#125;
09/06/2009 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