Grails Duplicate Erro Mensagens
-
05-07-2019 - |
Pergunta
Sou novo no Grails e tenho um problema:
Eu tenho esse trecho de GSP:
<g:form url="[controller:'main',action:'login']">
<label for="name">Usuario:</label><br/>
<input type="text" name="name" /><br/>
<label for="pass">Password:</label><br/>
<input type="password" name="password"/><br/>
<input type="submit" value="Login"/><br/>
<g:renderErrors bean="${cmd}"/>
</g:form>
O controlador (MainController.groovy) usa um objeto de comando, aqui está o código para ambos:
def login = { LoginCommand cmd ->
if(cmd.validate()){
redirect(action:'ok')
}else{
render(view:'index',model:[cmd:cmd])
}
}
class LoginCommand {
String name
String password
static constraints = {
name(blank:false,size:5..10)
password(blank:false,size:5..10)
}
}
O problema é que, quando entro em um nome ou passe ruim (em branco ou fora do alcance) Isso me mostra 4 erros, dois para a senha e dois para o nome de usuário. Eles são iguais, mas duplicados.
Descobri que criar um método "bool validateCommand () {name && senha}" e substituindo -o para command.validate () não lança duplicatas, mas quero usar os recursos de restrições dos graals para manter as coisas secas.
Alguma ideia de por que isso acontece? Muito obrigado!
Solução
Quando você injeta objetos de comando em ações do controlador, os Grails executam validate()
automaticamente, portanto, não há necessidade de chamá -lo manualmente. Tentar
if(!cmd.hasErrors())
ao invés de
if(cmd.validate())
Parece que todo chamado para validate()
Adiciona novos erros (duplicados) ao objeto de comando. IMHO isso não deve acontecer e provavelmente é um bug nos Grails. Voce deveria considerar comunicando esse assunto.